跳轉到內容

CAT 工具/DéjàVu X/SQL

來自華夏公益教科書,開放的書籍,開放的世界

DVX 中的 SQL

DVX 基於 Transact-SQL,這是微軟和 Sybase 對用於查詢資料庫的結構化語言的解釋。透過使用 SQL,您可以選擇(檢視或匯出)或處理(更新或刪除)滿足特定條件的資料庫段。前者稱為 SQL Select;後者稱為 SQL Execute。DVX 的不同版本對 SQL 提供以下支援

DVX 編輯器 - 無。

DVX Standard - SQL Select(參見 DVX Standard 手冊)。

DVX Professional - SQL Select 和 SQL Execute(參見 DVX Professional 手冊)。

DVX Workgroup - SQL Select 和 SQL Execute(參見 DVX Workgroup 手冊)。

例如,您可以使用 SQL 刪除 2004 年 1 月 2 日至 2004 年 1 月 10 日 13:07 之間由使用者 John 建立的所有資料庫段,前提是這些字串不包含“dog”一詞。或者,如果某些資料庫段已連結到特定客戶 A,則在客戶 B 決定接管客戶 A 後,您可以將客戶 A 的名稱更改為客戶 B。示例可以根據您的需要變得複雜。

在 DVX 中使用 SQL 是一個非常高階的主題,關於它已經寫了很多東西。上述手冊是關於在 DVX 中使用 SQL 的非常好的資源。另一個非常好的資源是 A Tinkerer's Guide to SQL in DVX,作者是 Michael Farrell。

DVX 記憶體資料庫中 SQL 用法的示例

請注意,SQL Select 語句是透過螢幕中間左側的 SQL Select 輸入的,而 SQL Execute 語句是透過 Database > Execute SQL 輸入的。下劃線部分需要您自行填寫。

將使用者暱稱 A 更改為使用者暱稱 B

UPDATE Sentences SET UserNick = 'newnick' WHERE UserNick = 'oldnick'

將客戶 A 更改為客戶 B

UPDATE Translations SET Client = 'newclient' WHERE Client LIKE '*partofoldclientsname*'

根據實際專案名稱或其一部分(而不是 PrjID)更新客戶名稱

UPDATE Translations SET Client='newclient' WHERE ID IN (SELECT ID FROM Translations WHERE PrjID in (SELECT Projects.Prjid FROM Projects WHERE ((Projects.PrjTitle) LIKE "*partOfProjectName*")))

根據日期戳更新客戶名稱

UPDATE Translations SET Client='newclient' WHERE ID IN (SELECT ID FROM Sentences WHERE DateStamp >= #mm/dd/yyyy hh:mm# AND DateStamp < #mm/dd/yyyy hh:mm#)

您必須指定日期範圍,因為日期戳還包含有關時間的資訊。如果需要,您可以省略時間部分 (hh:mm)。

刪除句子開頭處的數字和後面的製表符

此外,還可以將函式包含在 SQL 語句中,以增加更多靈活性。下面的語句可能對已新增到資料庫的帶對齊的記錄很有用,在這種情況下,可能會出現一些奇怪的模式。例如,某些記錄可能以數字開頭,後面跟著一個製表符(在資料庫中顯示為一個長空格)。

UPDATE Sentences SET Sentence=RIGHT(Sentence,LEN(Sentence)-instr(Sentence,chr(9))) WHERE ID IN (SELECT ID from Sentences WHERE Sentence LIKE '[0-9]*'+chr(9)+'*')

上面的說明可以轉換為 SQL Select 語句(僅供檢視或匯出),方法是省略到第一個WHERE例項(包括該例項)之前的所有內容。強烈建議在實際執行這些語句之前,先透過進行選擇來測試 SQL。

DVX 專案中 SQL 用法的示例

以下 SQL 查詢用於檢查一個專案的目標段,其中英語是源語言,荷蘭語是目標語言。對於其他語言程式碼,請檢視 DVX 手冊或線上幫助。

檢查標點符號
開啟行選擇器,選擇 SQL 語句,貼上下面列出的查詢,然後選擇應用。
target_1043 like '* .*' OR
target_1043 like '* ,*' OR
target_1043 like '* ;*' OR
target_1043 like '* :*' OR
target_1043 like '* [?]*' OR
target_1043 like '* [!]*'
這將選擇所有在前面有空格的“.”、“,”、“;”、“:”、“?”、“!”的段。

檢查右括號前面的空格和左括號後面的空格
開啟行選擇器,選擇 SQL 語句,貼上下面列出的查詢,然後選擇應用。
target_1043 like '* )*' OR
target_1043 like '* *' OR
target_1043 like '* >*' OR
target_1043 like '*( *' OR
target_1043 like '* *' OR
target_1043 like '*< *'
這將選擇所有在前面有空格的“)”、“]”、“>”或後面有空格的“(”、“[”、“<”的段。

源包含句號,而目標不包含
source like "*.*" and target_1043 not like "*.*"

目標包含左括號,但不包含右括號
target_1043 like "*(*" and target_1043 not like "*)*"

源包含左括號,而目標不包含
source like "*(*" and target_1043 not like "*(*"

源包含右括號,而目標不包含
source like "*)*" and target_1043 not like "*)*"

目標段比源段長
LEN(target_1043) > len(source)

目標段位元定值長(對字幕或軟體字串有用)
LEN(target_1043) > 38

目標的第 4 個位置是空格
InStr(1,target_1043," ",1)=4

源以大寫字母開頭,而目標以小寫字母開頭
(asc(left(source,1)) between 96 and 122) AND (asc(left(Target_1043,1)) between 65 and 90)
(一個語句!)

華夏公益教科書