2016-05-10 60 views
-1

您好,因爲它在標題中說明我的名稱格式爲LASTNAME,FIRSTNAME,我希望以名字姓氏的格式輸入數據。這將在SSIS中的OLE DB SOURCE查詢中使用,因此不要在函數中使用它。如何才能做到這一點?SQL Server - 將LASTNAME,FIRSTNAME轉換爲駱駝大小寫名字姓氏

+1

什麼是downvoting?我已經非常清楚地表明我需要什麼...... – jhowe

+0

轉換名稱的情況時要小心。一個很好的例子是[MACDONALD](https://en.wikipedia.org/wiki/Macdonald)。麥克唐納和麥克唐納都是有效的姓氏。您將無法單獨從原始數據中確定要使用哪個版本。有很多很多例子都有很多邊緣案例。 –

+0

我感謝您的評論。在這種情況下,我不會在乎它是否出現在麥克唐納而不是麥克唐納... – jhowe

回答

1
declare @NameString Varchar(50) = 'BLOGGS, JOE' 

    SELECT CASE WHEN CHARINDEX(',',@NameString) = 0 THEN 'Unexpected format: ' + @NameString ELSE 
    UPPER(LEFT(RIGHT(@NameString,len(@NameString)-CHARINDEX(',',@NameString)-1),1)) + --First Initial 
    LOWER(SUBSTRING(@NameString,CHARINDEX(',',@NameString)+3,LEN(@NameString))) -- rest of first name 


    +' ' + 
    UPPER(LEFT(@NameString,1)) -- Surname initial 
    + LOWER(RIGHT(LEFT(@NameString,CHARINDEX(',',@NameString)-1),LEN(LEFT(@NameString,CHARINDEX(',',@NameString)-1))-1)) -- rest of surname 
    END 
+0

當使用此我得到'無效的長度參數傳遞給左側或子字符串函數'。 – jhowe

+0

你沒有逗號在表格中有任何值嗎? – JamieA

+0

這可能是我的錯1分鐘。 – jhowe

0

如何將名字轉換爲camelcase?你怎麼知道把大寫字母放在哪裏?如果FIRSTNAME是JOE,那麼它的作用是什麼?喬?如果你的意思,那麼你可以這樣做:

SELECT UPPER(LEFT(FIRSTNAME,1))+LOWER(SUBSTRING(FIRSTNAME,2,LEN(FIRSTNAME))) FROM .... 
+0

當我說camelcase我的意思是Joe Bloggs而不是BLOGGS,JOE它是如何存儲的... – jhowe

+0

這給出了與@Rahul相同的結果,姓氏不以大寫字母開頭。 – jhowe

1

另一個版本,但用更少的功能:

DECLARE @Name VARCHAR(100) 
SET @Name = 'LASTNAME, FIRSTNAME' 
SELECT 
    -- First Name 
    UPPER(SUBSTRING(@Name, CHARINDEX(',', @Name) + 2, 1)) 
     + LOWER(SUBSTRING(@Name, CHARINDEX(',', @Name) + 3, 1000)) 
    + ' ' 
    -- Last Name 
    + UPPER(LEFT(@Name, 1)) 
     + LOWER(SUBSTRING(@Name, 2, CHARINDEX(',', @Name) - 2)) 

將是有趣的,看看它如何與JamieA答案性能比較明智的,如果任何區別都是顯而易見的。

+0

這會給出錯誤消息537,級別16,狀態3,行3 傳遞給LEFT或SUBSTRING函數的長度參數無效。 – jhowe

+0

這將是缺少的逗號問題。我會建議性能會相同,因爲數據庫引擎將使用相同的執行計劃,但+1作爲SUBSTRING提高了您的答案的可讀性。雖然如果我真的很挑剔,你的答案有'少'功能,而不是'少';) – JamieA

+1

憐憫語法上受到挑戰的外國人:) – Alex

相關問題