MS SQL query with wildcard and select dont work...but why?

问题描述 投票:0回答:1

我是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月的生日,我输入12,然后在数据库中搜索匹配的日期。

輸出 20.12.2000, 11.12.1945, 1.12.1977 ...


EDIT:Thx for help, but this not work:(

我找到了正确的格式。

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

但是当我寻找解决方案时,我读到了更多关于 "TRY_PARSE "的信息,这个函数返回完整的日期,如果我只输入日期或年份,这个函数返回 "null",因为没有完整的日期可读。我不确定,但目前我认为这是我的错误......。

sql sql-server wildcard date-format
1个回答
1
投票

因为如果你看了手册就会发现,LIKE确实是把左边和右边进行比较,这是一个字符串。

不是SQL代码,是一个STRING。

它并没有以任何方式被解释,超出了对带通配符的字符串的记录。

所以,基本上你要寻找

寿星

类似下面的字符串。

%(SELECT TRY_PARSE((SELECT CONVERT(nvarchar, '2')) AS DATE USING 'en-gb'))%。

它并没有对此做任何解释,显然你的生日都不是那个特定的SQL语句。

© www.soinside.com 2019 - 2024. All rights reserved.