2016-01-20 80 views
2

我運行使用SAS對Teradata數據下面的查詢,並能正常工作Teradata的LEFT()函數的問題

SELECT LEFT(first_name,7) 
FROM testTab 

然而,當我運行Sql Assistant它拋出一個錯誤相同的查詢:Expected something between keyword SELECT and keyword LEFT

在我的另一臺電腦上,上面的代碼在Sql Assistant上運行。

所以,我的問題是,爲什麼LEFT函數有時有效,有時它不?

有很多解決方法,但我想知道這個LEFT函數到底會發生什麼?

+0

檢查您是否以TERADATA或ANSI模式連接到Teradata。 – Tom

+0

謝謝。如何用Sql Assistant檢查它? – Emily

+0

這是Teradata ODBC連接定義的設置。 「HELP SESSION」命令會顯示它,但我不確定這是否會成爲某些連接而不是其他連接的原因。 – Tom

回答

2

我不確定SAS版本是如何運行的,因爲LEFT不是Teradata中的函數。 LEFT是Teradata中的關鍵字,因爲LEFT OUTER JOIN。也許SAS有某種解析器/重寫的東西,可以將它轉換爲適當的Teradata函數。

無論如何,在Teradata的做到這一點,你可以這樣做:

SELECT SUBSTRING(first_name FROM 1 FOR 7) FROM testtab 
+0

謝謝。有很多解決方法。我只想知道爲什麼會發生這種情況?這個'LEFT'函數在文檔中找不到什麼東西?它是如何起作用的? – Emily

+1

我的猜測是SAS內置的功能可能與Teradata不同,而且SAS在提交給Teradata之前會重寫查詢。我對SAS很少了解,但我認爲這是一個安全的選擇,因爲只有SUBSTRING()和SUBSTR()在Teradata中進行字符串解析。 – JNevill

+2

根據「禁用分析」設置,您還可以在ODBC中使用「LEFT」(驅動程序將其重寫爲SUBSTR)。這是TD15.10 – dnoeth

0

要解決,再去配置OBDC - >選項 - >選中「啓用舊式解析」

0

或者你可以寫在SEL {fn FunctionName()}中;

例如SEL {fn MONTH(DATE)};

1

解決方法: SELECT {FN LEFT(如first_name,7)} FROM TESTTAB;

注意:這需要從SQL助手使用ODBC連接使用下列特殊設置運行:

在SQL助理去工具 - >「定義ODBC數據源」 - > < <單擊所需的Teradata DNS >> - > Configure - > Options - >「Enable Legacy Parser」