我是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",因为没有完整的日期可读。我不确定,但目前我认为这是我的错误......。
因为如果你看了手册就会发现,LIKE确实是把左边和右边进行比较,这是一个字符串。
不是SQL代码,是一个STRING。
它并没有以任何方式被解释,超出了对带通配符的字符串的记录。
所以,基本上你要寻找
寿星
类似下面的字符串。
%(SELECT TRY_PARSE((SELECT CONVERT(nvarchar, '2')) AS DATE USING 'en-gb'))%。
它并没有对此做任何解释,显然你的生日都不是那个特定的SQL语句。