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年代。您可以对此进行配置,但正确的解决方案是使用四位数年份。