我有一个日期存储一个mm / dd / yyyy形式的字符串,它被传递到SQL Server SP以插入到数据库中。如何以yyyy-mm-dd格式转换它,以便SQL Server实际将其正确插入到具有日期时间类型的列中?只是保持字符串mm / dd / yyyy似乎没有做任何事情。
答案 0 :(得分:2)
只要有可能,您应该避免使用与文化相关的日期格式。
看看这个:
DECLARE @StringDate VARCHAR(100)='06/29/2016';
SET LANGUAGE ENGLISH;
SELECT CAST(@StringDate AS DATE)
/*
Throws an exception!
SET LANGUAGE GERMAN;
SELECT CAST(@StringDate AS DATE)
*/
了解TSQL: CONVERT及其格式。您的格式是数字101:
SELECT CONVERT(DATE,@StringDate,101)
最好是使用独立格式You might read this
答案 1 :(得分:0)
您可以使用PARSE()从特定于文化的格式创建DATETIME对象,然后将其转换为所需的字符串:
select convert(varchar(20), parse('02/15/2016' as datetime2 using 'en-US'), 20);
20是CONVERT()的ODBC日期样式(YYYY-mm-dd)的特定代码。
答案 2 :(得分:0)
有三种方法可以做到这一点:
您可以事先设置DATEFORMAT设置:
SET DATEFORMAT mdy;
INSERT INTO Table1 (DateCol) VALUES ('09/30/2016');
或者您可以使用CONVERT功能:
INSERT INTO Table1 (DateCol) VALUES (CONVERT(datetime, '09/30/2016', 101))
或者最后您可以使用PARSE功能,这样会更灵活,因为它会接受其他日期格式,例如' 2016年9月30日星期五'但显然有点慢:
INSERT INTO Table1 (DateCol) VALUES (PARSE('09/30/2016' as datetime using 'en-US'))