尝试更改 sqlite 数据库中字段的部分值
Trying to change partial value in a field in sqlite databse
我需要更新一个相当大的值的部分 sickbeard.db。
数据库中的一行看起来很简单:
"66" "305288" "1" "Stranger Things" "/media/tv1/Stranger Thins" "Netflix" "|Adventure|Drama|Fantasy|Horror|Mystery|" "Scripted" "50" "3" "Friday 3:00 AM" "Continuing" "0" "0" "2016" "0" "en" "0" "tt4574334" "737297" "0" "" "" "0" "0" "0" "3"
在位置字段中,我需要更改的数据是“/media/tv1/Some 电视节目”,但我需要将其更改为“/media/TV/tv1/Some 电视节目”。此字段包含 /media/tv1 或 /media/tv2,我想添加电视,因此字段如下所示:/media/TV/tv1
我一直在尝试这个:
UPDATE tv_shows SET location = replace( '/media/tv%', '%tv%', '%TV/tv%' );
但它只会更改为 /media/tv%(之后会删除所有其他内容。)这当然会破坏应用程序。
我真的不想在 gui 中手动操作
UPDATE tv_shows SET location = replace(location, '/media/', '/media/TV/');
假设您要更改的列名为 location
。
首先,根据online documentation,参数如
replace(original, find, replacement)
替换不接受模式。请注意,必须将原始字符串显式传递给函数。 (没有获取原始字符串的自动上下文。)其次,如果您想确保原始字符串与特定模式匹配,例如您不在其他可能的匹配中进行替换,则需要 WHERE条款来限制选择。就像原来的字符串参数一样,没有根据参数应用自动条件...必须使用WHERE子句才能正确限制更新:
UPDATE tv_shows
SET location = replace(location, '/media/tv', '/media/TV/tv')
WHERE location LIKE '/media/tv%'
注意:由于 replace()
returns 原始字符串的匹配失败,因此对每一行执行此操作可能没有明显的负面影响,特别是如果您希望唯一的匹配项出现在路径字符串的开头。但是,最好包含一个适当的 WHERE 子句以使命令更高效(仅更新必要的内容)并限制错误代码的负面影响(如果您得到,则无需破坏 table 中的每一行表达错误,至少它只会被限制在一个子集)。
我需要更新一个相当大的值的部分 sickbeard.db。 数据库中的一行看起来很简单:
"66" "305288" "1" "Stranger Things" "/media/tv1/Stranger Thins" "Netflix" "|Adventure|Drama|Fantasy|Horror|Mystery|" "Scripted" "50" "3" "Friday 3:00 AM" "Continuing" "0" "0" "2016" "0" "en" "0" "tt4574334" "737297" "0" "" "" "0" "0" "0" "3"
在位置字段中,我需要更改的数据是“/media/tv1/Some 电视节目”,但我需要将其更改为“/media/TV/tv1/Some 电视节目”。此字段包含 /media/tv1 或 /media/tv2,我想添加电视,因此字段如下所示:/media/TV/tv1
我一直在尝试这个:
UPDATE tv_shows SET location = replace( '/media/tv%', '%tv%', '%TV/tv%' );
但它只会更改为 /media/tv%(之后会删除所有其他内容。)这当然会破坏应用程序。
我真的不想在 gui 中手动操作
UPDATE tv_shows SET location = replace(location, '/media/', '/media/TV/');
假设您要更改的列名为 location
。
首先,根据online documentation,参数如
replace(original, find, replacement)
替换不接受模式。请注意,必须将原始字符串显式传递给函数。 (没有获取原始字符串的自动上下文。)其次,如果您想确保原始字符串与特定模式匹配,例如您不在其他可能的匹配中进行替换,则需要 WHERE条款来限制选择。就像原来的字符串参数一样,没有根据参数应用自动条件...必须使用WHERE子句才能正确限制更新:
UPDATE tv_shows
SET location = replace(location, '/media/tv', '/media/TV/tv')
WHERE location LIKE '/media/tv%'
注意:由于 replace()
returns 原始字符串的匹配失败,因此对每一行执行此操作可能没有明显的负面影响,特别是如果您希望唯一的匹配项出现在路径字符串的开头。但是,最好包含一个适当的 WHERE 子句以使命令更高效(仅更新必要的内容)并限制错误代码的负面影响(如果您得到,则无需破坏 table 中的每一行表达错误,至少它只会被限制在一个子集)。