2016-05-19 60 views
0

我有一個表格,其中一個字段包含字符串302720"?解析帶有雙引號的字符串

當我嘗試做該字符串的子字符串時,它會返回一個錯誤。我知道這是因爲字符串中的雙引號。

我試圖用REGEXP_REPLACE替換引號,即使這樣也行不通。

下面的SQL語句:

SELECT SUBSTR("302720"?", 0, 3) 

對此有任何意見,將不勝感激。

+0

所以你想在結果中返回雙引號還是你總想排除它? – PyNoob

+3

哪個RDBMS(售貨員和版本)? – Shnugo

+0

如果您使用單引號而不是雙引號,會出現什麼情況? 'SELECT SUBSTRING('302720'?',0,3)' –

回答

1

請看下面的例子。你沒有列出DBMS,所以我假設SQL Server。

代碼

CREATE TABLE SUBSTR_TEST(STRING VARCHAR(50) NOT NULL) 
INSERT INTO SUBSTR_TEST 
VALUES('302720"?') 

SELECT * FROM SUBSTR_TEST 

SELECT SUBSTRING(REPLACE(STRING,'"',''),0,3) AS STRING FROM SUBSTR_TEST 

結果

enter image description here

+0

對不起,我正在使用IPython notebook。DebugData字段是一個包含302720的字符串?「。所以,當我把調試數據的子字符串,它什麼都不返回。 SELECT d.HardwareId,d.DebugReason,d.DebugData FROM (SELECT 硬件ID,DebugReason,DebugData, INTEGER(SUBSTR(DebugData,0,3))爲D1, FROM TABLE_DATE_RANGE(調試,TIMESTAMP(」 2016-05-16'),TIMESTAMP('2016-05-16')) WHERE DebugReason = 50013 and HardwareId = 550661626) – user3447653

+0

@ user3447653你想在python中做一個子字符串嗎?或者在數據庫中?你使用哪個數據庫(PostGRESQL,SQL Server,MySQL)? – PyNoob

+0

我的表格位於Google Big查詢中。所以使用IPython筆記本,我查詢它。 – user3447653

1

如果你的手這樣做,既可以使用不同的報價...

SELECT SUBSTR('302720"?', 0, 3) 

或者你可以逃避報價。您可以通過報價翻倍做到這一點:

SELECT SUBSTR("302720""?", 0, 3) 

或者你也可以使用傳統的\轉義字符。

SELECT SUBSTR("302720\"?", 0, 3) 

如果你在程序中這樣做,使用prepared statement與綁定參數。這避免了必須處理逃逸以及避免主機security problems。具體細節因語言而異,但通常是這樣的:

handle = connection.prepare("SELECT SUBSTR(?, ?, ?)"); 
handle.execute('302720"?', 0, 3) 
result = handle.fetch 

這與將變量傳遞到函數中類似。

相關問題