我試圖選擇長度小於16個字符的字段爲timestamp
的行。我已經試過如下:在MySQL中有長度(字段)
SELECT LENGTH(timestamp), id
FROM my_table
HAVING LENGTH(timestamp) < 16
但我得到這個錯誤:
#1054 - Unknown column 'timestamp' in 'having clause'
有什麼建議?
我試圖選擇長度小於16個字符的字段爲timestamp
的行。我已經試過如下:在MySQL中有長度(字段)
SELECT LENGTH(timestamp), id
FROM my_table
HAVING LENGTH(timestamp) < 16
但我得到這個錯誤:
#1054 - Unknown column 'timestamp' in 'having clause'
有什麼建議?
我想你想:
SELECT LENGTH(`timestamp`), id
FROM my_table
WHERE LENGTH(`timestamp`) < 16
或者如果你實際上是試圖組的結果...
SELECT LENGTH(`timestamp`)
FROM my_table
GROUP BY LENGTH(`timestamp`)
HAVING LENGTH(`timestamp`) < 16
注意反引號(`)在每個例子中逃脫列名稱。
+1 - 因爲'timestamp'是MySQL中的保留字。 – 2012-02-27 11:41:51
是的,我想要第一個變體。我知道在WHERE子句中使用聚合函數是不可能的,所以我嘗試使用HAVING。無論如何,如果我添加「GROUP BY ID」或「GROUP BY LENGTH(時間戳)」,則不會有任何變化。我仍然得到相同的錯誤,但是必填字段肯定存在。 – user1235446 2012-02-27 11:42:41
@ user1235446確保你在前後用反引號字符寫'時間戳'(空格僅用於格式化,不需要)。 'timestamp'在MySQL中是保留的,所以你需要告訴解析器明確地將它當作字段名。 – Yuck 2012-02-27 11:44:22
我認爲這將是努力:
SELECT DISTINCT
LENGTH(timestamp)
FROM my_table
WHERE LENGTH(timestamp) < 16
這可行,但我認爲在WHERE子句中使用LENGTH並不是一個好主意,因爲它與SQL標準相矛盾,如果我沒有弄錯的話。 – user1235446 2012-02-27 11:49:37
請使用'SHOW CREATE TABLE my_table'並告訴我們您的實際表定義。 – Kaii 2012-02-27 11:38:11
'CREATE TABLE \'my_table \'( \'id \'int(11)NOT NULL AUTO_INCREMENT, \'title \'text CHARACTER SET utf8 NOT NULL, \ board_id \ (1)NOT NULL, \'preview \'text CHARACTER SET utf8 NOT NULL, \'expired'int(012) 11)NOT NULL, \ full \'mediumtext CHARACTER SET utf8 NOT NULL, PRIMARY KEY(\'id \') )ENGINE = MyISAM AUTO_INCREMENT = 1442 DEFAULT CHARSET = cp1251 COLLATE = cp1251_bin' – user1235446 2012-02-27 12:21:56
我找到了解決方案。在早期版本的MySQL適當的變體是 'SELECT LENGTH(\'時間戳\')AS臨時 FROM MY_TABLE GROUP BY長度(\'時間戳\') HAVING溫度<16' – user1235446 2012-02-27 13:32:31