gpt4 book ai didi

string - SQLite选择字符串相等,其中值与列名相同?

转载 作者:行者123 更新时间:2023-12-03 18:44:43 25 4
gpt4 key购买 nike

我有一个 SQLite (v3.8.7.1 2014-10-29) 数据库,其中包含一个包含本地安装软件包名称的表,包括版本详细信息、安装日期、软件主页 URL 等。
现在问题出现了,其中一个包(CPAN 模块“版本”)恰好与表列之一具有相同的名称,即“版本”。
在表“包”的最简单的测试用例中


姓名
版本


删除
2.2.5

代替
1.2.5

搜索
3.1

版本
0.2.3


echo 'SELECT * FROM Packages where name = "replace" ;' | sqlite3 Test.db
replace|1.2.5
echo 'SELECT * FROM Packages WHERE name = "search" ;' | sqlite3 Test.db
search|3.1
但是当试图检索名为“版本”的包的条目时,
echo 'SELECT * FROM Packages WHERE name = "version" ;' | sqlite3 Test.db
没有返回任何内容,因为它可能正在尝试将名称与“版本”列中的值进行比较。
有没有办法强制进行文字字符串比较,或者避免此类问题的唯一解决方案是将列从“版本”重命名为其他名称,例如“package_version”,希望它永远不会与可能的包名称字符串发生冲突?

最佳答案

这与中的问题相同
sqlite SELECT returns all records when querying a column for a value with the same name as the column
在搜索可能的答案时我错过了。
Sky Sanders 的解决方案是在字符串值周围使用单引号。

echo "SELECT * FROM Packages WHERE name = 'version' ;" | sqlite3 Test.db
显式单引号可防止 shell 变量的扩展,因此可以通过使用扩展为单引号的 shell 变量来解决该问题,即
name="version"
quote="'"
table="Packages"

echo "SELECT * FROM ${table} WHERE name = ${quote}${name}${quote} ;" | sqlite3 Test.db

关于string - SQLite选择字符串相等,其中值与列名相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43432123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com