我正在尝试将导入到我的应用程序中的数据从nvarchar转换为日期,以便可以将日期与当前系统日期进行比较,以确保不使用过去的日期。
数据通过应用程序导入到通用表,其中所有列均为nvarchar(无法更改进程),这导致我需要转换数据类型以将字段与日期进行比较。
我尝试了以下代码来转换日期(TestData表示我在此实例中使用的列):
CAST(TestData as date)
CONVERT(date, TestData)
这给了我以下错误消息:无法将nvarchar转换为日期。
猜测我在这里缺少一些容易的事情,以为我会在这里碰碰运气。
答案 0 :(得分:0)
假设输入的日期格式始终为“ DD-MM-YYYY”,就像您在其中一条评论中所说的那样:
DECLARE @data NVARCHAR(250)
SET @data = '24-06-2019'
SELECT CONVERT(DATE, @data, 103) AS [Date] -- 104 or 105 will work as well
结果: 2019-06-24
答案 1 :(得分:0)
事件,如果您要将varchar字段转换为日期时间格式,则您的输入记录必须采用正确的格式。可能是您在varchar字段中的数据不是日期时间格式。可能有些值为NULL
。
请检查一次您的记录。
或
您输入的输入格式不正确。使用convert
函数将日期时间与其相应的date format
进行转换。
请找到此链接https://www.w3schools.com/sql/func_sqlserver_convert.asp,供您参考convert。
答案 2 :(得分:-1)
您能否举一个有关您的nvarchar数据外观的示例? 我写了这个示例,向您展示如何将nvarchar(200)变量与当前日期进行比较,但是nvarchar是一个简单的字符串值,其格式以SQL能够理解的正确方式进行(因此,我要从您的示例中询问一个示例)一边;-))
Use Master
go
declare @Dates as nvarchar(200)
set @dates = '23 jan 2019'
--set @dates = '23/01/2019' --This one will generate a Conversion Failed
--set @dates = '01/23/2019' --This one will NOT generate a Conversion Failed
Select Cast(@dates as Date) 'Casted', GetDate() 'Today',DateDiff(d,Cast(@dates as Date),GetDate()) 'Days'