我正在尝试将datetime
列转换为ISO格式,例如yyyymmdd
。例如,我希望能够将'13 dec 2018'转换为'20181213'。
根据Microsoft's T-SQL Docs,我应该可以使用
convert(nvarchar(8), '13 dec 2018', 112)
但是这不起作用-我得到的结果是'13 dec 2',它看起来只不过是原始字符串,该字符串被缩减为8个字符。
我也尝试使用
convert(datetime, '13 dec 2018', 112)
这给了我'Dec 13 2018 12:00 AM'的结果-同样,该函数应该产生什么。
我做错了什么?我可以使用datepart()
和串联字符串很容易地解决问题,但是如果可能的话,我宁愿使用更优雅的方法。
答案 0 :(得分:4)
合并它们:
convert(nvarchar(8), convert(datetime, '13 dec 2018'), 112)
我不建议您将格式112
用于第一次转换,因为这会引起误解。 SQL Server非常擅长进行无格式转换。如果您确实使用一个,则合适的是106
。
答案 1 :(得分:1)
我知道了-因为我将日期输入为字符串,而不是先不将其转换为datetime值,所以我将日期视为字符串。当我这样处理时:
convert(nvarchar(8), cast('13 dec 2018' as datetime), 112)
我得到了预期的结果'20181213'。
答案 2 :(得分:0)
答案 3 :(得分:0)
YYYYMMDD格式可以通过datetime转换为varchar格式。
select convert(varchar(8),convert(datetime, '13 dec 2018'),112)
上面的查询提供了所需的结果