2017-07-12 1 views
-1

J'ai une table:Sql Server choisir seulement des consonnes de nom

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 

à chaque insertion dans ce tableau, la valeur dans la colonne « code approprié » devrait être créé choisir les trois premières consonnes de la valeur dans la colonne "name"

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

Exemple:

Ponzio Pilato => PNZ 

Répondre

1

Créer une fonction qui supprime les voyelles dans la chaîne. Ensuite, obtenez le premier 3 caractères de la valeur de retour. La fonction devrait être comme ça.

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') 

// Ceci renvoie NFRMTN SYSTM

Ou vous pouvez le faire dans votre requête SQL comme celui-ci

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

La liste des voyelles diffère entre les différents classements. –

+0

Quel alphabet utilisez-vous? N'est-ce pas constant? @RemusRusanu –

+1

Eh bien, que se passe-t-il si la chaîne provient d'une colonne avec un classement turc? Vous devriez être familier avec le problème http://www.i18nguy.com/unicode/turkish-i18n.html Idem pour beaucoup plus de caractères, comme 'ü'. Et, la fonction étant VARCHAR non NVARCHAR, vous ne pouvez même pas compter sur les caractères lui-même, cela dépend du * collation * de la colonne d'origine pour avoir du sens. –