如何从数据库中选择列名称恰好包含5位数的行

时间:2017-12-11 10:37:19

标签: sql ms-access

所以,我有一个包含一些行数的数据库。它们包含有关书籍的信息。我需要选择名称中包含5个数字的书籍。 我试图通过

选择
SELECT * FROM books WHERE Name LIKE “*#*#*#*#*#*”

但是此查询的结果是返回包含超过5位数字的书籍

例如,我有一些行(书名):

  1. 杀死一只知更鸟 2
  2. 1984 2
  3. 指环王(指环王,# 1 - 3
  4. 纳尼亚传奇(纳尼亚传奇,# 1 2 3 4 5 下,的 6 下,的 7
  5. 查询,我需要的,必须返回2但不是4项

4 个答案:

答案 0 :(得分:1)

如果您需要选择具有一定数字位数的所有图书,您可以使用LIKE子句检查多个数字范围。

SELECT  *
FROM books
WHERE Name LIKE '*[0-9]*[0-9]*[0-9]*[0-9]*[0-9]*'

答案 1 :(得分:0)

所以,这非常非常容易。

SELECT *
FROM books
WHERE Name LIKE "*#*#*#*#*#*" AND Name NOT LIKE "*#*#*#*#*#*#*"

答案 2 :(得分:-1)

使用您的表名和列名尝试以下语句:

select yt.*, regexp_substr(<book_name>, '[[:digit:]]+',1, 1)
  from <YOUR_TABLE> yt
 where length(regexp_substr(<book_name>, '[[:digit:]]+',1, 1) ) = 5
;

答案 3 :(得分:-1)

如果name列是数字,则可以使用此查询。

SELECT * FROM table1 WHERE ISNUMERIC(column1) = 1 and LEN(column1) = 5

如果name列是字母数字,那么你可以创建一个函数,它在字符串中没有数字

CREATE FUNCTION dbo.GetNumbers
(@str VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
DECLARE @intAlpha INT
SET @intAlpha = PATINDEX('%[^0-9]%', @str)
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @str = STUFF(@str, @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^0-9]%', @str )
END
END
RETURN ISNULL(@str,0)
END
GO

创建函数后,您可以使用此查询

SELECT * FROM table1 WHERE LEN(dbo.GetNumbers(column1)) = 5