Avatar billede dotdonk Nybegynder
25. august 2006 - 13:12 Der er 11 kommentarer og
2 løsninger

SQL query til at ændre noget tekst

Hej med jer...

Jeg har prøvet og omskrive en lidt ældre query, til det denne her skal kunne, men det lykkedes mig ikke. :-(

Håber der er en som vil give en hånd.

Jeg har en tabel som indeholder skole og by navne fra alle lande.

Desværre er disse lande og byer skrevet med stort alle sammen.

Eks.:

  land                  skole                    by
-----------------------------------------------------------
Danmark | DEN SOCIALE HØJSKOLE                | DK ÅRHUS
Belgien | INSTITUT SUPERIEUR D'ARCHITECTU...  | B LIEGE

skal blive til:

  land                  skole                    by
-----------------------------------------------------------
Danmark | Den Sociale Højskole              |  Århus
Belgien | Institut Superier D'architectu... |  Liege


Jeg har brug for en query som læser alle værdierne in fra skole feltet, og laver det første bogstav i hvert ord til UPPER CASE og resten af ordet lower case og det skal kun være et mellemrum der tjekkes på, før en UPPER må blive til lower næst efter mellemrummet. Bare så den ikke tager D'ARCHITECTU og laver til D'Architectu... det skal være D'architectu...

I by feltet er det det samme. Første bogstav UPPER CASE resten lower plus at landekoden skal fjernes som står før by navnet.

Der er altid mellemrum mellem DK ÅRHUS

Håber at høre fra nogen

Mvh

T.
Avatar billede teepee Nybegynder
25. august 2006 - 14:26 #1
Jeg kan hjælpe dig med første halvdel:

UPDATE [tabelnavn] SET skole = CONCAT(UPPER(SUBSTRING(skole,1,1)), LOWER(SUBSTRING(skole,2)));
Avatar billede teepee Nybegynder
25. august 2006 - 14:35 #2
Den anden må være (kan sammenskrives med ovenstående):
UPDATE [tabelnavn] SET by = substring(by,
                      charindex(' ',by)+1 ,
                      len(by));
Avatar billede teepee Nybegynder
25. august 2006 - 14:37 #3
Jeg kan se at jeg mangler at lave lower case på resten af bynavnet, men der kan du evt. køre første update på "by" i stedet for "skole" EFTER nummer to update er kørt, eller brug lidt tid på at sammenskrive det hele...
Avatar billede lorentsnv Nybegynder
25. august 2006 - 14:40 #4
Hvis du har MS Access, kunne du måske vurdere at linke tabellen ind i Access, og bruge StrConv funktionen til at konveretere med. Denne funktion håndterer at konvertere første bogstav af hvært ord til stor bogstav. Jeg ved ikke om den klarer dit eksempel med D'ARCHITECTU.
Avatar billede lorentsnv Nybegynder
25. august 2006 - 14:50 #5
I Access bør du kunne gøre noget lignende:

UPDATE [tabelnavn]
SET [By] = SubStr([By], 3)
  , Skole = SubStr(Skole, 3)
  , Land = SubStr(Land, 3)

Der findes også et 3. parameter til StrConv, som styrer hvilke skprog regler som skal bruges.

Hvis det er en engangskonvertering, og du har Access, kan du enten importere data og konvertere dem, inden du smider dem tilbage, eller bare lave en link til din SQL Server tabel og lave en Access forespørgsel som opdaterer data.
Avatar billede teepee Nybegynder
25. august 2006 - 15:32 #6
1. Man kan altså ikke hardcode at den skal spise tre tegn når Belgien kodes B og Danmark kodes DK...
2. Når nu at det kan løses i basen det allerede ligger i.....
Avatar billede lorentsnv Nybegynder
25. august 2006 - 15:36 #7
Sorry, det er ikke SubStr, men StrConv som skal bruges. Parameteren 3 bruges til at indikere at hvert ord skal have stor første bogstav, og små bogstaver for resten. SQL'en skal se således ud:

UPDATE [tabelnavn]
SET [By] = StrConv ([By], 3)
  , Skole = StrConv (Skole, 3)
  , Land = StrConv (Land, 3)
Avatar billede lorentsnv Nybegynder
25. august 2006 - 15:38 #8
Formålet med at bruge Access, skulle være at bruge en funktion som netop løser det aktuelle problem. Mig bekendt, findes der ikke nogen tilsvarende SQL funktion på SQL Server, og man skal derfor til at lave en hel del SQL for at kunne løse samme opgave.
Avatar billede lorentsnv Nybegynder
25. august 2006 - 15:44 #9
Lidt søgning på nettet viser at der måske findes mulight i SSIS (Integration services) til at bruge VbStrConv:

Proper Case for Data in a SSIS Script Component Transform
posted Friday, January 13, 2006 6:49 PM by bknight

Well I feel like a college professor that shows the student a five page math problem and then follows up with a single button you could hit in your calculator to do the same thing. I used to hate that and now I'm that guy :). Anyways, in yesterday's post I showed how to do string conversions with the proper case (first letter in every word capitalized) by using regular expressions. While that was a pretty elogate way to do it, you can perform the same function with a simple built-in function called VbStrConv.ProperCase in the SSIS data flow. This function lets you take the input of a string and converts the string to the proper case. In the following code, you can see I have the input column called InputName and then I massage the data and output the value of OutputName.

The code then shrinks down to a single important line shown below in the commented line:

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper

Public Class ScriptMain
  Inherits UserComponent

  Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
      'This is the line that performs the magic to Proper Case.
      Row.OutputName = StrConv(Row.InputName, VbStrConv.ProperCase)
  End Sub

End Class

PS: Special thanks to Toby Rogers for catching how easy this would be to use VbStrConv instead of Regular Expressions!

-- Brian Knight

Teksten er fundet på følgende link:
http://www.whiteknighttechnology.com/cs/blogs/brian_knight/archive/2006/01.aspx
Avatar billede janus_007 Nybegynder
26. august 2006 - 00:58 #10
hehe.. igen en lille arkitekturkommentar herfra mig. Du må som hovedregel ikke basere dit system på formatet i databasen, databasen skal kun levere data og intet andet. Ønsker du at transformere dette data skal det foregå i dit businesslag, her vil det dels være nemmere at lave diverse regler, dels er MSSQL ikke egnet til stringmanipulation ;-)

Og ja... jeg ved godt BLL også kan implementeres i T-SQL *S*
Avatar billede dotdonk Nybegynder
28. august 2006 - 11:26 #11
Tak for jeres indlæg...

I mellemtiden har min samarbejdspartner formateret dataene i et Excel ark.

:-), men nye problemstillinger er dukket op.

Smider lige en ny tråd herinde med den.

De af jer som vil have point, må lige smide et svar. Så deler jeg dem mellem som tak for jeres tid.

Hygge
Avatar billede lorentsnv Nybegynder
28. august 2006 - 12:03 #12
Du får selv vurdere om du vil give points :)
Avatar billede dotdonk Nybegynder
23. oktober 2006 - 16:00 #13
Tak for jeres svar...

I er altid behjælpelige.

Deler points mellem jer.

:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester