2014-10-26 42 views
1

我有PostgreSQL to_date()函數的問題,在我提到的代碼中,我得到語法錯誤但找不到where。PostgreSQL to_date()

SELECT * from crosstab('select upit, sat, count(*) as broj 
           from upiti 
           where datum >= to_date('26-10-2014','DD-MM-YYYY') AND datum <= to_date('29-10-2014','DD-MM-YYYY') 
           group by upit,sat 
           ORDER BY upit,sat', 

'select rbrSat from sat order by rbrSat') as ct (upit text, s00 INT, s01 INT, s02 INT, s03 INT, s04 INT, s05 INT, s06 INT, s07 INT, s08 INT, s09 INT, s10 INT, s11 INT, s12 INT, s13 INT, s14 INT, s15 INT, s16 INT, s17 INT, s18 INT, s19 INT, s20 INT, s21 INT, s22 INT, s23 INT); 

它說語法錯誤接近「2014」。任何人都知道問題在哪裏?

+1

這個片段看起來不錯。您應該編輯問題並添加完整查詢(並且,在使用YYYY-MM-DD格式的日期時,您可能不需要'to_date()')。 – 2014-10-26 15:00:19

+0

我懷疑你在查詢中早些時候缺少一個結束引號''',使得之前的字符串在2014年之前結束,而不是剛剛開始。 – 2014-10-26 15:01:47

+0

用完整查詢編輯 – TranceFusion 2014-10-26 15:11:12

回答

3

您正嘗試在單引號字符串中使用未轉義的單引號'。如果您需要在字符串內添加單引號,則需要將其加倍,如'';

SELECT * from crosstab('select upit, sat, count(*) as broj 
         from upiti 
         where datum >= to_date(''26-10-2014'',''DD-MM-YYYY'') 
          AND datum <= to_date(''29-10-2014'',''DD-MM-YYYY'') 
          group by upit,sat 
          ORDER BY upit,sat', 

...

+5

在這裏使用美元引用('$$')更好,事實上,非常方便。 – vyegorov 2014-10-26 15:20:08

+0

使用ANSI日期文字:'DATE'2014-10-26''使它更短 – 2014-10-26 15:33:27