使用通配符进行ms sql查询并选择“不工作…”但为什么呢?

ef1yzkbh  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(275)

我是sql新手,正在尝试调试:
这样做有效:

(SELECT TRY_PARSE((SELECT CONVERT(nvarchar, '12.02.2021')) AS DATE USING 'en-gb'))

这同样有效:

SELECT * FROM Employees 
WHERE BirthDay LIKE (SELECT TRY_PARSE((SELECT CONVERT(nvarchar, '2.12.1989')) AS DATE USING 'en-gb'))

这同样有效:

SELECT * FROM Employees 
WHERE BirthDay LIKE '%2%'

但这行不通:

SELECT * FROM Employees
WHERE BirthDay LIKE '%(SELECT TRY_PARSE((SELECT CONVERT(nvarchar, '2')) AS DATE USING 'en-gb'))%'

为什么?我写了一些不可能的东西,还是我错在什么地方了?
我的想法是从桌面应用程序中读取欧盟格式的日期(用户输入),将其转换为美国格式,并在数据库中搜索只有日期、年份或月份(不是完整日期)的匹配项。
示例:我需要12个月的所有生日,我键入12,然后在数据库中搜索匹配项。
输出:20.12.2000,11.12.1945,1.12.1977。。。
编辑:thx以获取帮助,但这不起作用:(
我找到了正确的格式:

SELECT * FROM Employees
WHERE BirthDay LIKE '%' + (SELECT TRY_PARSE((SELECT CONVERT(nvarchar, '1989')) AS DATE USING 'en-gb')) + '%'

但是当我搜索解决方案时,我读了更多关于“try\u parse”的内容,并且这个返回完整日期,如果我只输入了天或年,函数返回“null”,因为没有完整的日期可以读取。我不确定,但现在我认为这是我的错误。。。

qxsslcnc

qxsslcnc1#

因为如果你读了手册,你会发现like会比较左边和右边,这是一个字符串。
不是sql代码,而是字符串。
它不会以任何方式被解释为超出了使用通配符的字符串的文档。
所以,基本上你要找的是
生日
就像下面的字符串:
%(选择try\u parse((选择convert(nvarchar,'2'))作为日期,使用'en gb'))%
它没有对此做任何解释,很明显,您的生日都不是那个特定的sql语句。

相关问题