2013-03-08 50 views
0

我對某些我認爲必須非常簡單的事情有點麻煩。在表格中添加一列,結果是該行的兩個字段的連接結果

我有一個包含一個表:

CREATE TABLE cities( 
city_id INT PRIMARY KEY, 
city_article TEXT, 
city_name TEXT 
); 

所以,CITY_NAME是具有例如名稱,如「PARIS」或「紐約一個簡單的字段。 city_article大部分是空的,除了一些城市(如法國城市)誰需要在他們面前就像「拉羅謝爾」這是在數據庫中設置爲 city_article =「LA」 CITY_NAME =「ROCHELLE」

文章

我想創建一個包含city_article和city_name的連接的新列,以' - '分隔,並用相同的' - '替換每個空格。

因此,如果我們採取類似 '紐約' 在 city_article分離= '的' CITY_NAME = 'NEW YORK'

第三列是 city_concatenated = 'THE-NEW-YORK'

訣竅是,由於不是所有的城市都有文章,我不希望像'PARIS'這樣的城市在手術後成爲'-PARIS'。

有沒有這樣的方式來做到這一點很容易?

TL; DR:如何創建一個包含2個其他列的結果的新列,其中一列可以是NULL,另一個列必須將每個空格替換爲' - '而不用將' - '放在哪裏由於沒有第一個領域而不需要。

回答

1

我不知道你是否能夠在City_article有一個空字符串,但我認爲這可能發生:

SELECT CONCAT(CASE WHEN City_Article = '' OR City_Article IS NULL THEN '' ELSE CONCAT(City_Article, '-') END, REPLACE(city_name, ' ', '-')) 
FROM Cities; 

作爲列添加這個方面,以及我不會。由於MySQL不允許計算列,我建議創建一個存儲此列定義的視圖。這確保了全名是總是最新的和額外的列不需要更新,如果文章或城市名稱即可更新:

CREATE VIEW Cities_Ext 
AS 
SELECT City_ID, 
     City_Article, 
     City_Name, 
     CONCAT(CASE WHEN City_Article = '' OR City_Article IS NULL THEN '' ELSE CONCAT(City_Article, '-') END,REPLACE(city_name, ' ', '-')) AS FullName 
FROM Cities; 

Example on SQL Fiddle

+0

謝謝,我甚至不知道關於意見的存在。這是否意味着我插入城市的每一個新行都會自動更新視圖? – 2013-03-08 19:14:06

+0

視圖不過是存儲的查詢,所以是的,如果更新表格,視圖的輸出將更新 – GarethD 2013-03-09 00:15:26

1

把第一個破折號一個COALESCE語句中:

SELECT COALESCE(city_article + '-','') + REPLACE(city_name, ' ', '-')