2017-07-12 4 views
-1

Ich habe eine Tabelle:SQL Server wählen nur Konsonanten von Namen

CREATE TABLE [PRODUCTS].[PRODUCERS](
[ID] [bigint] NOT NULL CONSTRAINT [id_producers] DEFAULT (NEXT VALUE FOR 
[producersID_SEQ]), 
[VAT_CODE] [varchar](255) NULL, 
[CODE] [varchar](45) NULL, 
[NAME] [varchar](45) NOT NULL, 
[NOTE] [varchar](255) NULL, 
[TFACTORY] [varchar](11) NULL DEFAULT ('@@'), 
[fitting_code] [varchar](3) NULL, 
CONSTRAINT [SQL160208104403390] PRIMARY KEY CLUSTERED 

bei jedem Einsatz in dieser Tabelle ist der Wert in der Spalte „Passcode“ soll die ersten drei Konsonanten aus dem Wert Kommissionierung in Spalte erstellt werden "name"

insert into products.PRODUCERS (fitting_code) select ... 

Beispiel:

Ponzio Pilato => PNZ 

Antwort

1

eine Funktion erstellen, die Vokale in Zeichenfolge löscht. Dann erhalten Sie das erste 3 Zeichen vom Rückgabewert. Funktion sollte so sein.

CREATE FUNCTION dbo.FN_REMOVEL_VOWELS (@STRING VARCHAR(max)) 
returns varchar(max) 
as 
begin 
RETURN REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@STRING, 'A', ''), 'E', ''), 'O', ''), 'U', ''), 'I', '') 
END 


SELECT DBO.FN_REMOVEL_VOWELS('INFORMATION SYSTEM') 

// Dies wird NFRMTN SYSTM zurückkehren

Oder Sie können es in Ihrer SQL-Abfrage wie diese zwischen den verschiedenen Sortierungen

INSERT INTO products.PRODUCERS (NAME, fitting_code) 
VALUES(@NAME, SUBSTRING(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@NAME, 'A', ''), 'E', ''), 'O', ''), 'U', ''), 'I', ''), 1, 3)) 
+1

Die Liste der Vokale unterscheidet tun. –

+0

Welches Alphabet verwendest du? Ist es nicht konstant? @RemusRusanu –

+1

Nun, was ist, wenn die Zeichenfolge aus einer Spalte mit türkischer Sortierung stammt? Sie sollten mit dem Problem vertraut sein http://www.i18nguy.com/unicode/turkish-i18n.html Dito für viele weitere Zeichen, wie 'ü'. Und da die Funktion VARCHAR nicht NVARCHAR ist, kann man sich nicht einmal auf die Zeichen selbst verlassen, es kommt auf die * Sortierung * der ursprünglichen Spalte an, um einen Sinn zu ergeben. –