2014-11-11 128 views
0

我試圖修復一個SQL查詢以便稍後將其轉換爲Doctrine2 DQL,因爲它是Symfony2項目的一部分。這就是我的DDL有:如何在PostgreSQL中使用LIKE語句在WHERE中使用值?

CREATE TABLE "nomencladores"."norma" (
    "id" int4 NOT NULL, 
    "comite_tecnico_id" int4, 
    "numero" VARCHAR (10) COLLATE "default" NOT NULL, 
    "anno" int4 NOT NULL, 
    "nombre" VARCHAR (255) COLLATE "default" NOT NULL, 
    "activo" bool, 
    CONSTRAINT "norma_pkey" PRIMARY KEY ("id"), 
    CONSTRAINT "fk_f00cbe8e84edad75" FOREIGN KEY ("comite_tecnico_id") REFERENCES "nomencladores"."comite_tecnico" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION 
) WITH (OIDS = FALSE); 

而且我想執行一個LIKE查詢發現%45%,我已經嘗試了所有該查詢沒有成功:

的一個在DQL由Doctrine2產生

SELECT 
    n0_.numero AS numero0, 
    n0_.anno AS anno1, 
    n0_. ID AS id2, 
    n0_.nombre AS nombre3, 
    n0_.activo AS activo4, 
    n0_.comite_tecnico_id AS comite_tecnico_id5 
FROM 
    nomencladores.norma n0_ 
WHERE 
    n0_.anno LIKE %45%; 

嘗試投放的值

SELECT 
    n0_.numero AS numero0, 
    n0_.anno AS anno1, 
    n0_. ID AS id2, 
    n0_.nombre AS nombre3, 
    n0_.activo AS activo4, 
    n0_.comite_tecnico_id AS comite_tecnico_id5 
FROM 
    nomencladores.norma n0_ 
WHERE 
    CAST (n0_.anno AS CHAR) LIKE %45%; 

SELECT 
    n0_.numero AS numero0, 
    n0_.anno AS anno1, 
    n0_. ID AS id2, 
    n0_.nombre AS nombre3, 
    n0_.activo AS activo4, 
    n0_.comite_tecnico_id AS comite_tecnico_id5 
FROM 
    nomencladores.norma n0_ 
WHERE 
    CAST (n0_.anno, "FM9999") LIKE %45% 

SELECT 
    n0_.numero AS numero0, 
    n0_.anno AS anno1, 
    n0_. ID AS id2, 
    n0_.nombre AS nombre3, 
    n0_.activo AS activo4, 
    n0_.comite_tecnico_id AS comite_tecnico_id5 
FROM 
    nomencladores.norma n0_ 
WHERE 
    to_char(n0_.anno, "FM9999") LIKE %45% 

SELECT 
    n0_.numero AS numero0, 
    n0_.anno AS anno1, 
    n0_. ID AS id2, 
    n0_.nombre AS nombre3, 
    n0_.activo AS activo4, 
    n0_.comite_tecnico_id AS comite_tecnico_id5 
FROM 
    nomencladores.norma n0_ 
WHERE 
    n0_.anno::text LIKE "%45%" 

,沒有工作,什麼是實現這一目標上的PostgreSQL的正確方法?

回答

4

的語法是:

WHERE n0_.anno::text LIKE '%45%'; 

您需要cast數量text(或varchar),然後才能與LIKE運營商使用它。
LIKE的右側參數是一個text值。你的輸入是一個字符串文字準確。你需要single quotes for values,雙引號是標識符。

如果anno應該每年舉行,你在最後兩位數字只是感興趣,請即:

WHERE n0_.anno::text LIKE '%45'; 

或者更好,但:

WHERE n0_.anno % 100 = 45; 

%modulo operator.(與LIKE模式中的%符號無關!)
45(不含引號)是numeric constant