所以,我有一个包含一些行数的数据库。它们包含有关书籍的信息。我需要选择名称中包含5个数字的书籍。 我试图通过
选择SELECT * FROM books WHERE Name LIKE “*#*#*#*#*#*”
但是此查询的结果是返回包含超过5位数字的书籍
例如,我有一些行(书名):
查询,我需要的,必须返回2但不是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