簡體   English   中英

SQL 只從列中獲取數值

[英]SQL take just the numeric values from a column

我在列中有以下數據:

aud_344266_jayde_adams
int_343581_jtou_s5_ep1
of_344289_geordie_s21_rig_c
soft_343726_24hrpc_s4_norbiton
on_334195_sas_s5_1007_1008

我只想返回以下內容:

344266
343581
344289
343726
334195

正如你所知道的,我想返回的數字中有一個模式。 它們前后必須有下划線,並且長度為 6 個字符。

有沒有辦法在 SQL Server 中做到這一點?

對於您的示例數據,這有效:

select left(stuff(t.col, 1, patindex('%[_][0-9][0-9][0-9][0-9][0-9][0-9][_]%', t.col), ''), 6)

或者更簡單:

select substring(t.col, patindex('%[_][0-9][0-9][0-9][0-9][0-9][0-9][_]%', t.col) + 1, 6)

是一個 db<>fiddle。

您可以使用 left、right 和 charindex 函數

例子:

declare @row as varchar(100) = 'aud_344266_jayde_adams'

select @row,  right(@row, len(@row)-charindex('_',@row)), left(right(@row, len(@row)-charindex('_',@row)),-1 + charindex('_',right(@row, len(@row)-charindex('_',@row))))

對於您的桌子,您可以:

select left(right(_Column, len(_Column)-charindex('_',_Column)),-1 + charindex('_',right(_Column, len(_Column)-charindex('_',_Column))))
From Tbl

APPLY是你的朋友。

-- Sample Data
DECLARE @yourtable TABLE (SomeString VARCHAR(100));
INSERT @yourtable (SomeString) VALUES 
  ('aud_344266_jayde_adams'),('int_343581_jtou_s5_ep1'),('of_344289_geordie_s21_rig_c'),
    ('soft_343726_24hrpc_s4_norbiton'),('on_334195_sas_s5_1007_1008');

-- Solution
SELECT      TheNumber = SUBSTRING(t.SomeString,d1.Pos,d2.Pos-d1.Pos)
FROM        @yourtable AS t
CROSS APPLY (VALUES(CHARINDEX('_',t.SomeString)+1))      AS d1(Pos)
CROSS APPLY (VALUES(CHARINDEX('_',t.SomeString,d1.Pos))) AS d2(Pos);

返回:

TheNumber
----------
344266
343581
344289
343726
334195

您可以使用SUBSTRING結合CHARINDEX來實現它

select substring(value, CHARINDEX('_', value) + 1, 6)
from TempTable

db<>fiddle 上的演示

輸出

344266
343581
344289
343726
334195

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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