我有一個名稱格式爲「Doe,John」的表,我需要將其解析爲「Doe,J」。我已經寫了一個查詢來提取姓氏,但我不知道如何修改它以包含逗號和首字母。將名稱解析爲「姓氏,FI」的格式Oracle
SUBSTR(Table.Name,1,INSTR(Table.Name,',',1,1))
我有一個名稱格式爲「Doe,John」的表,我需要將其解析爲「Doe,J」。我已經寫了一個查詢來提取姓氏,但我不知道如何修改它以包含逗號和首字母。將名稱解析爲「姓氏,FI」的格式Oracle
SUBSTR(Table.Name,1,INSTR(Table.Name,',',1,1))
使用的NVL
,SUBSTR
和INSTR
一個組合。
SELECT NVL(SUBSTR("namefield", 0, INSTR("namefield", ',')+2), "namefield") AS Name
FROM yourtable
輸入
Doe, John
Smith, Mark
輸出
NAME
Doe, J
Smith, M
這個怎麼樣 -
SELECT SUBSTR(Table.Name,1,INSTR(Table.Name,',',1)+2)
的REGEXP_REPLACE版本,只要有該串中只有一個空間按您的示例性數據:
select regexp_replace('Doe, John', '(.* .).*', '\1')
的\ 1指的是在括號中的字符串,它是所有的字符串的匹配部分直到包括最後一個空格和後面的字符,忽略其餘部分。
你不應該在標識符周圍需要雙引號。它會強制區分大小寫,這會在使用不正確的情況下導致問題。 – MT0
@ MT0他們的字段名稱實際上並不叫'namefield',他們可以重新命名,因爲他們認爲合適,邏輯仍然是一樣的,但是我同意沒有雙引號:) – Matt
@Matt工程! NVL()是否必要? –