Sql VARCHAR到目前为止的转换问题
我有如下示例数据:Sql VARCHAR到目前为止的转换问题,sql,sql-server,tsql,datetime,Sql,Sql Server,Tsql,Datetime,我有如下示例数据: SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/1997', 3), 120); Date 1997-10-11 当我执行此操作时,会出现如下错误: SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/1997', 3), 120); Date 1997-10-11 味精241,第16级,状态1,第1行 从字符转换日期和/或时间时转换失败 绳子 因此,我删除了1997年的前两个
SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/1997', 3), 120);
Date
1997-10-11
当我执行此操作时,会出现如下错误:
SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/1997', 3), 120);
Date
1997-10-11
味精241,第16级,状态1,第1行从字符转换日期和/或时间时转换失败 绳子 因此,我删除了1997年的前两个字符
SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/97', 3), 120);
结果如下:
SELECT CONVERT(CHAR(19), CONVERT(DATE, '11/10/1997', 3), 120);
Date
1997-10-11
所以它从DD/MM/YY格式转换为YYYY-MM-DD格式
好吧,但为什么要到1997年,如果我要给17个,它会给2017年。
如果我给37,它会给2037,如果我给67,它会给1967
最后,如何将DD/MM/YYYY转换为YYYY-MM-DD格式当您指定四位数年份时,需要使用
103
:
SELECT CONVERT(DATE, '11/10/1997', 103)
-- 1997-10-11 (DATE)
如果要将日期转换回字符串,请再次转换:
SELECT CONVERT(VARCHAR(10), CONVERT(DATE, '11/10/1997', 103), 120)
-- 1997-10-11 (VARCHAR)
完整的样式列表。您可以使用双关103而不是3。 因此:
选择CONVERT(字符(19),CONVERT(日期,'11/10/1997',103),120)代码>将返回1997-10-11您能试试这个吗
declare @datechar as char(19) ='11/10/1997'
select FORMAT(convert(date,@datechar,103),'yyyy-MM-dd')
将SQL日期数据类型视为没有实际的DD/MM/YY或YYYY/MM/DD格式,因为该格式仅用于将其显示为字符串。这一年的难题是由于“分区”仅仅决定97年比1897年或2097年更有可能是1997年(合理吗?由你决定)我认为你需要找到一个不同于120的转换格式值,但是为什么它预测年份,如果我给37,它返回2037,如果我给50,它返回1950@salman,两位数的年份,例如50和37是不明确的。SQLServer使用a来决定37是1937还是2037。默认情况下,值0…49
属于2000年代,50…99属于1900年代。您可以对此进行配置,但正确的解决方案是使用四位数年份。