[英]How can I select rows from database where column Name contains exactly 5 digits
我有一個包含一些行數的數據庫。 它們包含有關書籍的信息。 我需要選擇名稱包含 5 個數字的書籍。 我試圖選擇
SELECT * FROM books WHERE Name LIKE “*#*#*#*#*#*”
但是此查詢的結果返回名稱包含超過 5 位數字的書籍
例如,我有一些行(書名):
和查詢,我需要的,必須返回 2 但不是 4 項
如果您需要選擇具有特定位數的所有書籍,您可以使用LIKE
子句檢查多個數字范圍。
SELECT *
FROM books
WHERE Name LIKE '*[0-9]*[0-9]*[0-9]*[0-9]*[0-9]*'
如果名稱列是數字,則可以使用此查詢。
SELECT * FROM table1 WHERE ISNUMERIC(column1) = 1 and LEN(column1) = 5
如果名稱列是字母數字,那么您可以創建一個函數,該函數在字符串中不包含數字
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
所以,這非常非常容易。
SELECT *
FROM books
WHERE Name LIKE "*#*#*#*#*#*" AND Name NOT LIKE "*#*#*#*#*#*#*"
嘗試使用您的表名和列名執行以下語句:
select yt.*, regexp_substr(<book_name>, '[[:digit:]]+',1, 1)
from <YOUR_TABLE> yt
where length(regexp_substr(<book_name>, '[[:digit:]]+',1, 1) ) = 5
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.