将nvarchar转换为日期? (数据类型,SQL)

时间:2019-06-24 19:47:57

标签: sql sql-server tsql ssms

我正在尝试将导入到我的应用程序中的数据从nvarchar转换为日期,以便可以将日期与当前系统日期进行比较,以确保不使用过去的日期。

数据通过应用程序导入到通用表,其中所有列均为nvarchar(无法更改进程),这导致我需要转换数据类型以将字段与日期进行比较。

我尝试了以下代码来转换日期(TestData表示我在此实例中使用的列):

CAST(TestData as date)
CONVERT(date, TestData)

这给了我以下错误消息:无法将nvarchar转换为日期。

猜测我在这里缺少一些容易的事情,以为我会在这里碰碰运气。

3 个答案:

答案 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

  • 103-英国/法国标准(dd / mm / yyyy)
  • 104-德国标准(dd.mm.yyyy)
  • 105-意大利标准(dd-mm-yyyy)

答案 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'