Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:将nvarchar转换为日期_Sql_Sql Server - Fatal编程技术网

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执行更新。