2013-12-09 50 views
1

說我有下面的例子字符串:在特定單詞位置之前/之後的字符串中替換單詞? (SQL語句)

SELECT a, b, c FROM table1 ORDER BY c 

我怎麼會(通過字符串操作)改變SELECT a, b, cSELECT COUNT(a),也拆除ORDER BY條款?

我需要在我的代碼中生成一個查詢並對其進行修改,以便我可以運行該查詢的COUNT()版本並顯示標記爲標記爲打印出的記錄數量超過總記錄數的標籤。

編輯:

說我有在那裏我進行聯合更復雜的查詢。爲了獲得與上面所述相同的功能,我需要做些什麼?我是否只是將我的第一個SELECT子句更改爲COUNT(*)或...?

SELECT a.memno, 
a.name, 
a.addr1, 
a.addr2, 
a.city, 
a.state, 
a.zip, 
a.sex, 
a.lname, 
a.ssan, 
b.addr1 as old_addr1, 
b.addr2 as old_addr2, 
b.city as old_city, 
b.state as old_state, 
b.zip as old_zip, 
b.timec 

FROM library1.table1 a, library1.table2 b 
WHERE a.memno = b.memno and 
b.groupid = 'P2' and 
b.type = 'B' and 
b.datec = 20131206 AND 
(a.addr1 <> b.addr1 or a.addr2 <> b.addr2 or a.city <> b.city or a. state <> b.state or a.zip <> b.zip) 
UNION 
SELECT 
a.memno, 
a.name, 
a.addr1, 
a.addr2, 
a.city, 
a.state, 
a.zip, 
a.sex, 
a.lname, 
a.ssan, 
b.addr1 as old_addr1, 
b.addr2 as old_addr2, 
b.city as old_city, 
b.state as old_state, 
b.zip as old_zip, 
b.timec 

FROM library2.table1 a, library2.table2 b 
WHERE a.memno = b.memno and 
b.groupid = 'N2' and 
b.type = 'B' and 
b.datec = 20131206 AND 
(a.addr1 <> b.addr1 or a.addr2 <> b.addr2 or a.city <> b.city or a. state <> b.state or a.zip <> b.zip) ORDER BY timec desc 
+0

我想你需要爲任何類型的查詢做到這一點?儘可能複雜? –

+0

基本上我需要刪除ORDER BY子句並將'FROM'左側的所有內容都更改爲我的新部分,這是沿着'SELECT COUNT(a.memno)'行的。 –

回答

0

一個可能的解決辦法是把整個查詢到一個子查詢計算(假定,你不關心ORDER子句):

SELECT COUNT(1) FROM (
    SELECT a, b, c FROM table1 ORDER BY c 
) 
+0

這可能適用於我目前的操作,儘管我必須在C#中操作字符串。 –

1

如果字符串真的是一致的,一個辦法是:

var input = "SELECT a, b, c FROM table1 ORDER BY c"; 
var output = input.Replace(
    input.Substring(0, input.IndexOf("FROM") - 1), 
    "SELECT COUNT(*)"); 

var orderByIndex = output.IndexOf("ORDER BY"); 
var output = output.Replace(
    output.Substring(orderByIndex, output.Length - orderByIndex), 
    ""); 

我在這裏我使用SELECT COUNT(*)知道,但這是保持算法簡單。如果通過其他方式可以輕鬆獲得關鍵字段,請將其插入,但如果必須從字符串中取出,解析的複雜性不值得分解。

+0

在我上面編輯聯盟的情況下,如何編輯?我如何修改它以獲得相同的COUNT(*)'功能? –

相關問題