0

私はかなり単純でなければならないと思う何かに少し問題があります。

次を含むテーブルがあります。

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

したがって、city_name は、たとえば「PARIS」や「NEW YORK」などの名前を持つ単純なフィールドです。city_article は、データベースで city_article = 'LA' city_name = 'ROCHELLE' として設定されている 'LA ROCHELLE' のような前に記事が必要な一部の都市 (フランスの都市など) を除いて、ほとんど空です。

'-' で区切られた city_article と city_name の連結を含む新しい列を作成し、すべてのスペースを同じ '-' に置き換えたいと思います。

したがって、'THE NEW YORK' のようなものを city_article = 'THE' city_name = 'NEW YORK' で区切ると、

3 番目の列は city_concatenated = 'THE-NEW-YORK' になります。

秘訣は、すべての都市に記事があるわけではないため、操作後に「PARIS」のような都市が「-PARIS」になることを望まないということです。

それを簡単に行う方法はありますか?

TL;DR: 他の 2 つの列の結果を含む新しい列を作成するにはどうすればよいですか?最初のフィールドの不在。

4

2 に答える 2

1

COALESCEステートメント内に最初のダッシュを入れます。

SELECT COALESCE(city_article + '-','') + REPLACE(city_name, ' ', '-')
于 2013-03-08T17:06:50.973 に答える
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;

SQLフィドルの例

于 2013-03-08T17:47:23.477 に答える