wake-up-neo.net

SQL nimmt nur die numerischen Werte von einem Varchar an

Angenommen, ich habe ein paar Felder wie die folgenden:

abd738927
jaksm234234
hfk342
ndma0834
jon99322

Typ: varchar.

Wie nehme ich nur die numerischen Werte zur Anzeige:

738927
234234
342
0834
99322

Haben Sie einen Teilstring ausprobiert, aber die Daten variieren in der Länge, und der Cast funktionierte nicht, weil er keine Ideen umsetzen konnte.

11
JsonStatham

Hier ist das Beispiel mit PATINDEX:

select SUBSTRING(fieldName, PATINDEX('%[0-9]%', fieldName), LEN(fieldName))

Dies setzt voraus, dass (1) das Feld eine numerische Zahl hat, (2) die numerischen Zahlen alle zusammengruppiert sind und (3) die numerischen Zahlen keine nachfolgenden Zeichen enthalten.

15
Sean

Wenn Sie keine Funktion erstellen möchten, können Sie einfach so etwas wie folgt: 

cast(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(YOUR_COLUMN
,'A',''),'B',''),'C',''),'D',''),'E',''),'F',''),'G',''),'H',''),'I',''),'J','')
,'K',''),'L',''),'M',''),'N',''),'O',''),'P',''),'Q',''),'R',''),'S',''),'T','')
,'U',''),'V',''),'W',''),'X',''),'Y',''),'Z',''),'$',''),',',''),' ','') as float) 
4
fuhry
DECLARE @NonNumeric varchar(1000) = 'RGI000Testing1000'
DECLARE @Index int  
SET @Index = 0  
while 1=1  
begin  
    set @Index = patindex('%[^0-9]%',@NonNumeric)  
    if @Index <> 0  
    begin  
        SET @NonNumeric = replace(@NonNumeric,substring(@NonNumeric,@Index, 1), '')  
    end  
    else    
        break;   
end     
select @NonNumeric -- 0001000
3
user1499112

Ich denke, Sie wollen die Val()-Funktion von VBA. Einfach zu erreichen mit IsNumeric()

create function Val 
(
    @text nvarchar(40)
) 
returns float
as begin
    -- emulate vba's val() function
    declare @result float 
    declare @tmp varchar(40)

    set @tmp = @text
    while isnumeric(@tmp) = 0 and len(@tmp)>0 begin
        set @tmp=left(@tmp,len(@tmp)-1)
    end
    set @result = cast(@tmp as float)

    return @result
end
2
Chris Gessler

Extrahieren Sie nur Zahlen (ohne while-Schleife), und überprüfen Sie jedes Zeichen, um festzustellen, ob es sich um eine Zahl handelt, und extrahieren Sie sie 

   Declare @s varchar(100),@result varchar(100)
    set @s='as4khd0939sdf78' 
    set @result=''

    select
        @[email protected]+
                case when number like '[0-9]' then number else '' end from 
        (
             select substring(@s,number,1) as number from 
            (
                select number from master..spt_values 
                where type='p' and number between 1 and len(@s)
            ) as t
        ) as t 
    select @result as only_numbers 
2
compcobalt

Eingabetabelle

wenn Sie Daten wie oben im Bild haben, verwenden Sie die folgende Abfrage

select field_3 from table where PATINDEX('%[ ~`[email protected]#$%^&*_()=+\|{};",<>/?a-z]%', field_3)=0

Die Ergebnisse werden so aussehen

Ergebnistabelle

2
Muhammad saqib
select substring(
                'jaksm234234',
                patindex('%[0-9]%','jaksm234234'),
                LEN('jaksm234234')-patindex('%[0-9]%','jaksm234234')+2
                )
1

Extrahieren Sie nur Zahlen aus einer Zeichenfolge. Gibt eine Zeichenfolge mit allen Zahlen zurück. Beispiel: this1is2one345long6789number gibt 123456789 zurück

CREATE FUNCTION [dbo].[GetOnlyNumbers] (@Temp VARCHAR(1000))

RETURNS VARCHAR (1000) AS BEGIN

    DECLARE @KeepValues AS VARCHAR(50)
    SET @KeepValues = '%[^0-9]%'
    WHILE PATINDEX(@KeepValues, @Temp) > 0
        SET @Temp = STUFF(@Temp, PATINDEX(@KeepValues, @Temp), 1, '')

    RETURN @Temp
END
0
kuklei