gpt4 book ai didi

sql-server - T-SQL,查找数值

转载 作者:行者123 更新时间:2023-12-02 19:20:50 25 4
gpt4 key购买 nike

我在 http://www.sql-ex.ru/ 上做了这个测验,确切地说是第 35 题。

问题如下:在“产品”表中,确定仅由数字或仅由拉丁字母(A-Z,不区分大小写)组成的型号。结果集:模型、模型类型。

我给出的正确答案是:

SELECT model,
type
FROM Product
WHERE Model NOT LIKE '%[^A-Z]%'
OR Model NOT LIKE '%[^0-9]%'

现在我的问题是为什么我需要双重否定才能使其发挥作用。如果我将代码重写为:

SELECT model,
type
FROM Product
WHERE Model LIKE '%[A-Z]%'
OR Model LIKE '%[0-9]%'

我得到了错误的答案:您的查询在第一个(可用)数据库上返回了正确的数据集,但在第二个检查数据库上返回了错误的数据集。* 记录数量错误(多了37条)

为什么第一个代码示例给出了正确的答案,而第二个示例却没有给出正确答案?

我试图找到答案,但没有成功。感谢您的解释。

最佳答案

 Where Model LIKE '%[A-Z]%' Or Model LIKE '%[0-9]%'

匹配 Model 至少包含一个字母数字字符的行。

这不会以任何方式排除那些包含混合字母数字和非字母数字字符的值。

例如由于存在 A

~A#- 将通过

此外,您的正确查询与其中之一匹配

  • '%[^A-Z]%':不包含任何非字母的字符串(即仅由字母组成或为空)
  • '%[^0-9]%':不包含任何非数字的字符串(即仅由数字组成或为空)。

在您的第二次尝试中根本不会处理此问题,并且将接受字母和数字的混合字符串。

我会使用你的第一次尝试,但如果你决心避免双重否定,你可以使用

SELECT model
FROM Product
WHERE Model LIKE REPLICATE('[A-Z]', LEN(Model))
OR Model LIKE REPLICATE('[0-9]', LEN(Model))

关于sql-server - T-SQL,查找数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com