我想在2012年后获取数据。
日期以nvarchar
格式保存在表格中。例如:12/31/2010
列还具有其他一些值,例如“机密”,我不希望这一行。
我正在尝试查询(如下所示),但未成功:-
select *
from tbl_ProductionWells
where CONVERT(NVARCHAR(10), wellstatusdate, 103) > CONVERT(NVARCHAR(10), '01/01/2012', 103)
编辑:-
我尝试了这个:-
SELECT *
FROM tbl_ProductionWells
WHERE DATEPART(YEAR, CAST(wellstatusdate AS date)) > 2012
但是它给出了错误(如下所示),此列还具有一些文本值,例如“不可用”,“机密” ..:-
消息241,级别16,状态1,行1
从字符串转换日期和/或时间时,转换失败。
注意:-我无法更改列数据类型,因为它还包含其他一些文本。
提前致谢
首先:将日期值存储在DATE
列中,将日期时间存储在DATETIME2
列中。始终为您的数据选择正确的数据类型
您必须将转换NVARCHAR
为DATE
,然后将其与进行比较,否则2012-01-01
您可以提取字符串的“年份”部分。
SELECT *
FROM tbl_ProductionWells
WHERE CONVERT(DATE, wellstatusdate) >= '2012-01-01'
最好的选择是将列的数据类型更改为DATE
。之后,您可以使用这些值执行许多不可思议的事情。将“ Confidental”标志存储在另一列中。
编辑一些其他信息:
请注意,STRING-> DATE转换取决于当前会话的语言。
运行此批处理以查看区别:
DECLARE @DateAsChar VARCHAR(32) = '01/02/12';
SET LANGUAGE us_english
SELECT CONVERT(VARCHAR(32), CONVERT(DATE, @DateAsChar), 120)
SET LANGUAGE Hungarian
SELECT CONVERT(VARCHAR(32), CONVERT(DATE, @DateAsChar), 120)
SET LANGUAGE Deutsch
SELECT CONVERT(VARCHAR(32), CONVERT(DATE, @DateAsChar), 120)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句