Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 将NVARCHAR转换为DATETIME并选择不同的年份_Sql_Sql Server - Fatal编程技术网

Sql 将NVARCHAR转换为DATETIME并选择不同的年份

Sql 将NVARCHAR转换为DATETIME并选择不同的年份,sql,sql-server,Sql,Sql Server,上述sql查询产生此错误: SELECT DISTINCT YEAR(convert(varchar(max),OrderCreatedDate)) from webshop 数据库中的值为NVARCHAR,格式如下:DD/MM/YYYY 00:00:00 AM(/PM) 我只想选择该年的唯一值 谢谢你的帮助试试这个 Conversion failed when converting date and/or time from character string. select distin

上述sql查询产生此错误:

SELECT DISTINCT YEAR(convert(varchar(max),OrderCreatedDate)) from webshop 
数据库中的值为NVARCHAR,格式如下:DD/MM/YYYY 00:00:00 AM(/PM)

我只想选择该年的唯一值

谢谢你的帮助

试试这个

Conversion failed when converting date and/or time from character string.
select distinct year(CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105)))
DD/MM/YYYY 00:00:00 AM(/PM)
是英国格式。请参见试试这个

select distinct year(CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105)))

DD/MM/YYYY 00:00:00 AM(/PM)
是英国格式。请参见

为避免此类问题,日期应保存在日期时间类型字段中,而不是字符串字段中

Year()
函数参数是
DateTime类型
而不是
字符串
。因此,您应该确保要传递的字符串可以转换为DateTime类型。在这种情况下,您可以使用
Left()函数修剪时间部分,并使用
103
样式,如下所示

SELECT DISTINCT YEAR(Convert(datetime,OrderCreatedDate,103)) from webshop 
更新: 如果您遇到错误,可能是由于您的日期格式。i、 e.您保存的字符串的格式可能与问题中所述的格式不同(
DD/MM/YYYY 00:00:00 AM(/PM)

在转换为日期之前,请使用
ISDATE()
函数进行检查,确定哪些记录导致了问题,并进行纠正

尝试此查询以获取所有具有无效字符串的字符串。以下查询将为格式无效的值返回0

--Example
declare @val nvarchar(50) = '28/10/2013 11:25:45 AM (/PM)'
select year(convert(date,left(@val,10),103)) myYear

--Applying to your query
SELECT DISTINCT Year(Convert(Date,Left(OrderCreatedDate,10),103)) FROM Webshop 
或者,您可以只获取导致问题的记录,如:

SELECT DISTINCT CASE WHEN IsDate(eft(OrderCreatedDate,10))=1 THEN  
                      Year(Convert(Date,Left(OrderCreatedDate,10),103)) 
                ELSE 0 END as myDate,
                OrderCreatedDate
FROM Webshop 

为避免此类问题,日期应保存在DateTime类型字段中,而不是字符串字段中

Year()
函数参数是
DateTime类型
而不是
字符串
。因此,您应该确保要传递的字符串可以转换为DateTime类型。在这种情况下,您可以使用
Left()函数修剪时间部分,并使用
103
样式,如下所示

SELECT DISTINCT YEAR(Convert(datetime,OrderCreatedDate,103)) from webshop 
更新: 如果您遇到错误,可能是由于您的日期格式。i、 e.您保存的字符串的格式可能与问题中所述的格式不同(
DD/MM/YYYY 00:00:00 AM(/PM)

在转换为日期之前,请使用
ISDATE()
函数进行检查,确定哪些记录导致了问题,并进行纠正

尝试此查询以获取所有具有无效字符串的字符串。以下查询将为格式无效的值返回0

--Example
declare @val nvarchar(50) = '28/10/2013 11:25:45 AM (/PM)'
select year(convert(date,left(@val,10),103)) myYear

--Applying to your query
SELECT DISTINCT Year(Convert(Date,Left(OrderCreatedDate,10),103)) FROM Webshop 
或者,您可以只获取导致问题的记录,如:

SELECT DISTINCT CASE WHEN IsDate(eft(OrderCreatedDate,10))=1 THEN  
                      Year(Convert(Date,Left(OrderCreatedDate,10),103)) 
                ELSE 0 END as myDate,
                OrderCreatedDate
FROM Webshop 

为什么人们显然不愿意使用正确的
date[time]
数据类型?为什么你不能为这些字段设置时间戳?为什么人们显然不愿意使用正确的
date[time]
数据类型?为什么你不能为这些字段设置时间戳?谢谢你的回复,我现在得到这个错误“将nvarchar数据类型转换为smalldatetime数据类型导致值超出范围”。有什么想法吗?感谢您的回复,我现在得到这个错误“将nvarchar数据类型转换为smalldatetime数据类型导致值超出范围”。有什么想法吗?我想保留英国格式,不过,感谢您的建议,我得到了这个错误“将nvarchar数据类型转换为datetime数据类型导致值超出范围。”这个错误可能是由坏数据造成的。我想并非所有数据都是正确的dd/mm/yyyy格式。我确实希望保留英国格式,感谢您的建议。但是,我收到了以下错误:“将nvarchar数据类型转换为datetime数据类型导致值超出范围。”此错误可能是由于数据错误造成的。我想并非所有数据都是正确的dd/mm/yyyy格式。谢谢您的回复和详细信息!我已尝试过查询,但我发现此错误“从字符串转换日期和/或时间时转换失败”。很高兴为您提供帮助。谢谢您的回复和详细信息!我已经尝试了这个查询,我得到了这样一个错误“从字符串转换日期和/或时间时转换失败。”。