检查DateTime是更大的nvarchar的一部分

时间:2015-08-09 14:48:59

标签: sql sql-server tsql

我有一张桌子,我们称之为“tblData'”。它有一个名为' details'这是一个nvarchar(4000)。在这个领域可能有这样的文字: ' blah blah ## 12/08/1982 ## blah blah'。开始和结束的部分' ##'可能存在也可能不存在。

我需要使用where子句创建一个select语句,该子句不会返回具有' ## [date] ##'的行。那就是将来。如果' ## [日期] ##'部分不存在,返回行。

这可以不使用函数吗? 如果我必须使用一个函数,一些示例代码可以派上用场,因为我几乎不知道任何tsql ... 10倍多!

2 个答案:

答案 0 :(得分:2)

这在SQL中很难做到。你可以通过提取日期并转换它来实现它。但是,SQL Server没有很好的字符串操作功能。

以下摘录日期:

(case when details like '% [0-9]0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9] %'
      then substring(details,
                     patindex('% [0-9]0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9] %',
                              details) + 1, 10)
end)

因此,您可以将其放入where子句中:

where details not like '% [0-9]0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9] %' or
      convert(date,
              (case when details like '% [0-9]0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9] %'
                    then substring(details,
                                   patindex('% [0-9]0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9] %',
                                   details) + 1, 10),
               end), 101) <= getdate();

答案 1 :(得分:-2)

Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();