sql日期时间验证

sql日期时间验证,sql,sql-server,Sql,Sql Server,我有一个数据类型为nvarchar的列,该列包含数据,即 2017-12, 2017-28, 2017-00, 0000, 0000-22 等等 因此,在列中我有无效数据,即2017-00,0000,0000-22,因此我希望列输出应为有效数据,即2017-12,2017-28等。 并在连接条件和case语句中使用该列。使用此查询 在这里,我正在做以下工作。 1.首先从值中删除- 2.因为您说过2017-122017-28是有效数据,表示年份后跟日期。 因此,在2017-1年至2017-31年

我有一个数据类型为
nvarchar
的列,该列包含数据,即

2017-12,
2017-28,
2017-00,
0000,
0000-22
等等

因此,在列中我有无效数据,即
2017-00
0000
0000-22
,因此我希望列输出应为有效数据,即
2017-12
2017-28
等。 并在连接条件和case语句中使用该列。

使用此查询

在这里,我正在做以下工作。 1.首先从值中删除- 2.因为您说过2017-122017-28是有效数据,表示年份后跟日期。 因此,在2017-1年至2017-31年期间,即2017-71年至207131年期间,拆除仪表板

下面的查询首先删除列的破折号,然后获取介于20171和201731之间的值。在查询年份中没有硬编码,因此它也适用于下一年,如2018年

Select * from yourtable where REPLACE(yourcolumn, '-', '') 
between (year(getdate())+'1') AND (year(getdate())+'31')

我不确定存储为文本的
2017-12
是否应该被视为有效数据。您为什么不使用日期类型作为日期信息?这是您的有效日期吗?您所遵循的日期格式可以考虑<代码> 28 >代码> <代码>日期>代码>只读Aaron Bertrand