【问题标题】:How to search in between a series of letters and numbers with SQL如何使用 SQL 在一系列字母和数字之间进行搜索
【发布时间】:2017-06-12 14:27:35
【问题描述】:

我有一列包含 aa01 和 ZZ99 之间的一系列字母和数字。我似乎无法弄清楚如何在列中搜索特定范围的列,例如 aa00 到 BZ99。

我尝试使用以下函数之间的函数,但没有成功:

SELECT test_name
FROM Test
WHERE test_series BETWEEN 'aa00' and 'BZ99'
GROUP BY test_name

编辑:我尝试添加引号,但它仍然没有返回任何内容。(我也在上面添加了它)

Edit2:MySQL 是引擎。

【问题讨论】:

  • 在字符串中添加引号。
  • WHERE test_series BETWEEN 'aa00' and 'BZ99'?什么引擎? mysql,postgresql? SQL 服务器,Oracle 等? Ascii 小写字母排在大写字母之后,因此它必须是“BZ99”和“aa00”,最低的项目必须位于两者之间。
  • 我尝试添加引号,但它仍然没有返回任何内容。
  • MySQL 是引擎
  • 在 ASCII 中,大写字符在“代码”方面排在小写之前,并且在这对之间要求较低的值在该对中的第一个。所以如果启用区分大小写,'BZ99' 会出现在 'aa00' 之前。所以反转这对,你应该会得到一些结果。

标签: mysql sql


【解决方案1】:

BETWEEN 要求较低的值在前。由于大写字符在小写之前,因此切换顺序;但请确保这是您所追求的值之间的值!

SELECT test_name
FROM Test
WHERE test_series BETWEEN 'BZ99' and 'aa00'
GROUP BY test_name

【讨论】:

  • Since upper case characters come before lower case 这个语句依赖于列的排序规则。 sqlfiddle.com/#!9/78788a/1
  • 优秀的评论。我确实假设了大写在小写之前的排序规则。
【解决方案2】:

由于我无法发表评论,因此我将在此处添加此作为答案。这很好地解释了它。

SQL BETWEEN for text vs numeric values

编辑:具体来说,这部分,注意你的 ASCII 值:

同理,表达式:

where food_name BETWEEN 'G' AND 'O'

将匹配 'O',但不匹配任何其他以 'O' 开头的字符串。

曾经简单的拼凑就是使用“~”。这具有最大的 7 位 ASCII 值,因此对于英语应用程序,它通常工作得很好:

where food_name between 'G' and 'O~'

【讨论】:

  • 请不要在答案中只留下链接。至少附上一个简短的摘要。
猜你喜欢
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2012-06-23
相关资源
最近更新 更多