簡體   English   中英

如何從數據庫中選擇列名稱正好包含 5 位數字的行

[英]How can I select rows from database where column Name contains exactly 5 digits

我有一個包含一些行數的數據庫。 它們包含有關書籍的信息。 我需要選擇名稱包含 5 個數字的書籍。 我試圖選擇

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

但是此查詢的結果返回名稱包含超過 5 位數字的書籍

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

  1. 殺死一只知更鳥2
  2. 1984 2
  3. 指環王 (The Lord of the Rings, # 1 - 3 )
  4. 納尼亞(納尼亞傳奇,#1,2,3,4,5,6,7)的記載

和查詢,我需要的,必須返回 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM