小编Pat*_*Pat的帖子

将float转换为datetime时出错

我试图将格式为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)

sql-server

4
推荐指数
1
解决办法
1万
查看次数

获取两个连续大写字符的索引

我试图将一个city/state/zip字段分为城市、州和邮政编码。通常我会用charindexof','来获取城市和州,用isnumericandright()来获取邮政编码。

这对于 zip 来说效果很好,但是我现在处理的数据中的大多数行都没有逗号City ST Zip。有没有办法识别两个大写字符的索引?

如果没有,除了单独检查每个州的案例陈述之外,是否有人有更好的主意?

编辑:我发现 PATINDEX/COLLATE 选项的工作相当间歇性。请参阅下面我的回答。

sql sql-server collation string-parsing

1
推荐指数
1
解决办法
2198
查看次数

strlen()的另一个问题

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从到intsize_t,但似乎并没有帮助.

c strlen

-1
推荐指数
1
解决办法
263
查看次数

标签 统计

sql-server ×2

c ×1

collation ×1

sql ×1

string-parsing ×1

strlen ×1