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.
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.
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)
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
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
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
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
select substring(
'jaksm234234',
patindex('%[0-9]%','jaksm234234'),
LEN('jaksm234234')-patindex('%[0-9]%','jaksm234234')+2
)
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