我试图将格式为yyyymmdd的float转换为datetime.根据这个格式,该格式的正确样式代码是112.
码:
select
convert(datetime,cast(myDate as numeric),112)
from MyTable
Run Code Online (Sandbox Code Playgroud)
错误:
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.
Run Code Online (Sandbox Code Playgroud)
没有cast as numeric零件,我得到同样的错误.我一直在寻找几个小时,但我找不到任何解决这个问题的方法.如果您知道将浮点数转换为日期时间的更好方法,我会接受这个想法.
谢谢您的帮助.
编辑
这是工作代码:
SELECT
case when isdate(CAST(CAST(myDate AS INT) AS VARCHAR(8))) = 1
then CAST(CAST(CAST(myDate AS INT) AS VARCHAR(8)) AS DATETIME)
end
from MyTable
Run Code Online (Sandbox Code Playgroud)
我把它包裹在里面,isdate因为那里有一些无效的日期.感谢Matt的帮助.
EDIT2
更好的版本:
SELECT
TRY_CAST(CAST(CAST(myDate AS INT) AS VARCHAR(8)) AS DATETIME)
FROM MyTable
Run Code Online (Sandbox Code Playgroud) 我试图将一个city/state/zip字段分为城市、州和邮政编码。通常我会用charindexof','来获取城市和州,用isnumericandright()来获取邮政编码。
这对于 zip 来说效果很好,但是我现在处理的数据中的大多数行都没有逗号City ST Zip。有没有办法识别两个大写字符的索引?
如果没有,除了单独检查每个州的案例陈述之外,是否有人有更好的主意?
编辑:我发现 PATINDEX/COLLATE 选项的工作相当间歇性。请参阅下面我的回答。
int main(void)
{
int i;
for (i = 0; i < strlen("word"); i++ );
{
printf("_");
printf(" ");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我似乎再次遇到strlen()的问题."_ _ _ _ "在这种情况下,for循环应该打印,因为单词中有四个字母.我猜它是strlen()返回一个size_t值.如何解决这个问题?我试图改变i从到int到size_t,但似乎并没有帮助.