SQL Server:将nvarchar转换为日期
如何将数据类型为SQL Server:将nvarchar转换为日期,sql,sql-server,Sql,Sql Server,如何将数据类型为nvarchar的字符串列(看起来像DD.MM.YYYY)转换为Date类型 我需要最简单的Date类型(不需要时钟时间),以便将此列视为日期 谢谢 编辑:我尝试了所有人推荐的方法,但不起作用 UPDATE [test3] SET [column3] = CONVERT(NVARCHAR(50), CONVERT(SMALLDATETIME, [column2], 105)) ALTER TABLE [test3] ALTER COLUMN [column3] SMALLDAT
nvarchar
的字符串列(看起来像DD.MM.YYYY)转换为Date
类型
我需要最简单的Date
类型(不需要时钟时间),以便将此列视为日期
谢谢
编辑:我尝试了所有人推荐的方法,但不起作用
UPDATE [test3]
SET [column3] = CONVERT(NVARCHAR(50), CONVERT(SMALLDATETIME, [column2], 105))
ALTER TABLE [test3]
ALTER COLUMN [column3] SMALLDATETIME
错误:
nvarchar数据类型转换为smalldatetime数据类型导致值超出范围
如果要转换为dd.mm.yyyy,则可以使用如下所示:
select convert(varchar, getdate(), 104)
但在您的情况下,您只需将nvarchar转换为日期,如下所示:
select convert(date, yourdate)
根据你的编辑和你所说的你想要的,你做的事情似乎有点不合规则,而且,我不知道你为什么在只想要日期的时候使用SMALLDATETIME,但还好 我假设您的表具有VARCHAR类型的[column2],其中的数据看起来像DD.MM.YYYY,您希望将其视为日期而不是字符串 首先,创建一列以保存日期信息:
ALTER TABLE [test3] ADD [column3] DATE
然后,您可以通过转换字符串数据来填充新列:
UPDATE [test3] SET [column3] = CONVERT(DATE, [column2], 104)
此外,格式绝对重要,因为在美国,“2019年12月3日”将转换为3月12日,而不是12月3日。如果假定服务器的区域设置正确,则可能会造成真正的混乱。如果在转换列中的数据时出现问题?
然后,首先发现并纠正错误的数据,或者以意外的格式 要找到它们,你可以利用 这和普通的一样。
但是如果转换失败,
TRY\u CONVERT
只会输出NULL,而不是抛出错误
SELECT TOP 1000 [column2], [column3]
FROM [test3]
WHERE TRY_CONVERT(DATE, [column2], 104) IS NULL
AND [column2] IS NOT NULL;
一旦您发现数据中的问题制造者,并对其进行纠正?那么更新应该可以工作了
UPDATE [test3]
SET [column3] = CONVERT(VARCHAR(10), CONVERT(DATE, [column2], 104), 23);
之后,可以更改第3列的类型
ALTER TABLE [test3]
ALTER COLUMN [column3] DATE;
或者首先将所有column3设置为NULL,然后进行类型更改,然后从column2更新
UPDATE [test3]
SET [column3] = NULL;
WHERE [column3] IS NOT NULL;
ALTER TABLE [test3]
ALTER COLUMN [column3] DATE;
UPDATE [test3]
SET [column3] = CONVERT(DATE, [column2], 104);
WHERE [column2] IS NOT NULL;
当你研究如何做到这一点时,你在谷歌使用了哪些搜索词?这是否回答了你的问题?看一看,然后选择将转换为您喜爱格式的数字。德语104似乎很有希望?我试过转换和施法,两种方法都不行。此外,日期格式并不重要,只是将此列视为日期的选项,因此我可以搜索特定的日期或周期。您仍然需要传递样式参数以消除区域歧义。例如(我在美国):SELECT CONVERT(日期,'03.12.2019')返回'2019-03-12',而SELECT CONVERT(日期,'03.12.2019',104)返回'2019-12-03',感谢帮助,这正是我所做的(顺便说一句,第2列是Nvarchar)仍然错误:“从字符串转换日期和/或时间时转换失败。”;我试过Date-tye和smallDateTime。谢谢!![test3]只是一个小测试表,我创建它是为了在真正的大表之前尝试这个过程。我无意中看到了30.02,它无法转换。现在它可以正常工作了!感激伟大的是的,有时候对数据的假设会带来麻烦。顺便说一句,要改变第3列,还有另一个选择。首先将所有column3更新为NULL,更改column3的类型,然后从column2执行更新。