我正在尝试使用Excel将一些旧的SQL Server数据传输到SQL Server中。似乎Import/Export Data
应用程序会自动将大多数数据列设置为NVARCHAR(255)
。我遇到的问题是,我的列之一应该是DATE
类型,但其中的所有数据都显示为此18.08.2000 14:48:15
。
所以,当我尝试使用这个查询时:
SELECT CONVERT(Date, DATE_TIME, 113)
FROM someTable
我收到此错误:
Msg 9807,Level 16,State 0,Line 1
输入字符串不遵循样式113,要么更改输入字符串,要么使用不同的样式。
来自CAST and CONVERT (Transact-SQL)的[styles]
无法解决我的问题。
非常感谢任何建议或帮助。
解决:
UPDATE myTable
SET columnName = CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105))
ALTER TABLE myTable
ALTER COLUMN columnName SMALLDATETIME
答案 0 :(得分:6)
据我所知 - 风格没有。 103(英国/法国)应该工作 - 不是吗?
DECLARE @input NVARCHAR(255)
SET @input = '18.08.2000 14:48:15'
SELECT CONVERT(DATETIME, @input, 103)
给我输出:
2000-08-18 14:48:15.000
这似乎很合理,不是吗?
答案 1 :(得分:3)
因此,如果它对任何人都有用,那么这就是将数据类型NVARCHAR更改为DATETIME的确切代码:
UPDATE myTable
SET columnName = CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105))
ALTER TABLE myTable
ALTER COLUMN columnName SMALLDATETIME
答案 2 :(得分:2)
如果您使用的是SQL Server 2012,请尝试:
PARSE(Date AS datetime USING 'en-GB')
如果这不起作用,请尝试:
PARSE(Date AS datetime USING 'Et-EE')
爱沙尼亚文化特别使用'。'作为日期分隔符(d.MM.yyyy H:mm:ss
),所以它应该有效。
(两者似乎都适用于SQL Fiddle)