Sql 如何使用字符串数据类型的日期值执行日期范围?

Sql 如何使用字符串数据类型的日期值执行日期范围?,sql,sql-server,Sql,Sql Server,我被迫使用存储为字符串的日期值 比如说, Fieldname: claimsDate data Type: nvarchar 这些值以mmddyy格式存储 例如:;022413 我已通过以下查询将其转换为2013年2月24日 select (left(claimsdate,2) + '/' + substring(claimsdate,3,2) + '/' + case when cast(right(claimsdate,2) as int) >= 70 then '19' else

我被迫使用存储为字符串的日期值

比如说,

Fieldname: claimsDate
data Type: nvarchar
这些值以mmddyy格式存储

例如:;022413

我已通过以下查询将其转换为2013年2月24日

select (left(claimsdate,2)  + '/' + substring(claimsdate,3,2) + '/' + case when cast(right(claimsdate,2) as int) >= 70 then '19' else '20' end + right(claimsdate,2)) claimsdate
from tblTable 
现在的问题是,我们无法使用该代码执行日期范围检查

我试过这样使用它:

select (left(claimsdate,2)  + '/' + substring(claimsdate,3,2) + '/' + case when cast(right(claimsdate,2) as int) >= 70 then '19' else '20' end + right(claimsdate,2)) claimsdate
from tblTable 
where (left(claimsdate,2)  + '/' + substring(claimsdate,3,2) + '/' + case when cast(right(claimsdate,2) as int) >= 70 then '19' else '20' end + right(claimsdate,2))
between '03/01/2007' and '12/31/2007'
这并没有给我我想要的范围。它只是随意显示日期

是否可以管理用于日期范围检查的代码


非常感谢您在sql中使用日期时间转换。这个链接向您展示了完整的示例

其中@fromDate和@endDate是日期时间变量


我希望这能满足您的需求

好的,我只是想澄清一下@Doan,我的情况是将2个解决方案打包成1个。首先,我的日期值以mmddyy格式存储。我在你发布的链接中没有看到。其次,除了上述格式之外,它还存储为字符串。你能告诉我这个链接在哪里处理吗?选择convertdatetime,'10/23/16',1-mm/dd/yy U.S。你可以在将你的值转换成'mm/dd/yy'格式后使用这个。你正在解决一个与我发布的不同的问题。我有以mmddyy格式存储的数据。我希望将其转换为mm/dd/yyyy。我上面的代码做到了这一点,但问题是我不能用它执行日期范围验证。是否有什么东西需要对我的代码进行调整,或者可能有另一种解决方案允许我们使用它来执行日期范围?你的解决方案与我想要的大不相同。谢谢你的努力。让我澄清一下。您有一个以mmddyy格式存储日期的列。是否要将其转换为mm/dd/yyyy,并在where子句中使用它来查找该列位于两个给定日期之间的所有记录?正确!但让我补充一点,那就是瓦查尔。这是sql server。我编辑了答案。这一次,我将用格式yyyy-mm-dd将字符串值转换为日期。这应该可以正常工作。请记住也使用了yyyy-mm-dd格式的@fromDate和@endDate。对不起,我错过了这篇文章。我现在正在测试它。虽然我们不希望它的格式,但我会给它一个尝试。没有工作。您的原始代码可能正在工作。我认为问题可能来自我的db。我将进一步检查它,看看能找到什么。我要合上这根线。谢谢你的时间和帮助。
select (left(claimsdate,2)  + '/' + substring(claimsdate,3,2) + '/' + case when cast(right(claimsdate,2) as int) >= 70 then '19' else '20' end + right(claimsdate,2)) claimsdate
from tblTable 
where  cast(((case when cast(right(claimsdate,2) as int) >= 70 then '19' else '20' end + right(claimsdate,2) + '-' + left(claimsdate,2)  + '-' + substring(claimsdate,3,2))) as datetime)
between @fromDate and @endDate