我有一张桌子,我们称之为“tblData'”。它有一个名为' details'这是一个nvarchar(4000)。在这个领域可能有这样的文字: ' blah blah ## 12/08/1982 ## blah blah'。开始和结束的部分' ##'可能存在也可能不存在。
我需要使用where子句创建一个select语句,该子句不会返回具有' ## [date] ##'的行。那就是将来。如果' ## [日期] ##'部分不存在,返回行。
这可以不使用函数吗? 如果我必须使用一个函数,一些示例代码可以派上用场,因为我几乎不知道任何tsql ... 10倍多!
答案 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();