跳转到内容

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)
(一个语句!)

华夏公益教科书