【问题标题】:How to write a query to convert nvarchar to date如何编写查询以将 nvarchar 转换为日期
【发布时间】:2020-05-30 06:03:09
【问题描述】:

我有一个包含日期和字符串值的单列表。如何编写查询将字符串转换为日期值?

usercomment:

comment
----------
02/22/2020
03/22/2020
Nochange
04/22/2020
userreviw

期望的输出:

comment
-----------
2020-02-22
2020-03-22
Nochange
2020-04-22
userreviw

【问题讨论】:

标签: sql sql-server


【解决方案1】:

尝试使用TRY_CONVERT

SELECT
    COALESCE(TRY_CONVERT(varchar(10),
                         TRY_CONVERT(datetime, col, 101),
                         120), col) AS col_as_date
FROM yourTable;

第一次调用TRY_CONVERT 中的格式掩码101 对应于日期格式mm/dd/yyyy,当它具有有效日期时,它与您的数据匹配。对于无效值,例如commentTRY_CONVERT 将返回NULL。然后,我们使用掩码 120 调用 TRY_CONVERT 以生成格式为 yyyy-mm-dd 的文本日期。

【讨论】:

    【解决方案2】:
    Select CASE 
             ISDATE(myColumn) WHEN 1 THEN CONVERT(nvarchar(10), CONVERT(datetime, myColumn, 101), 120)
             ELSE myColumn 
           end
    From myTable
    

    【讨论】:

    • Msg 241, Level 16, State 1, Line 5 从字符串转换日期和/或时间时转换失败。
    • 更新代码添加转换输出参数。
    • 意识到我们必须转换为 varchar 所以因为其他值都是 varchar。
    • 终于能够在 SSMS 上坐下来,才意识到其他答案已被接受。更正我的并测试它现在是一个工作选择块。先窃取到日期时间的转换,然后再转换为 nvarchar(10) 以获得正确的日期格式。
    • 非常感谢!它现在正在工作。最后的要求是写一个查询,其中评论少于 2 天是除了否。评论 iscomment_2days ------------ 2020-05-29 Y 2020-05-31 N Nochange N 2020-04-29 Y userreviw N
    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2020-10-05
    • 2015-09-23
    相关资源
    最近更新 更多