db_products
表:
| ID | Name |
| 40 | Foo Bar!~~~~ |
Run Code Online (Sandbox Code Playgroud)
我想生成一个slug名称列:
| ID | Name | Slug_Name |
| 40 | Foo Bar!~~~~ | foo-bar |
Run Code Online (Sandbox Code Playgroud)
这可以通过SQL实际完成吗?或者我需要使用不同的语言编写脚本吗?
编辑:我使用此函数在PHP中生成slug:
function toSlug($string,$space="-") {
if (function_exists('iconv')) {
$string = @iconv('UTF-8', 'ASCII//TRANSLIT', $string);
}
$string = preg_replace("/[^a-zA-Z0-9 -]/", "", $string);
$string = strtolower($string);
$string = str_replace(" ", $space, $string);
return $string;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的SQL技能相当基本.
ALTER TABLE db_products ADD Slug_Name VARCHAR
如何循环遍历每一行并设置Slug_Name = toSlug(Name)
但在SQL中?
这是一个简单的解决方案,只需一个查询:
UPDATE `my_table` SET alias = lower(name),
alias = replace(alias, '.', ' '),
alias = replace(alias, '\'', '-'),
alias = replace(alias,'š','s'),
alias = replace(alias,'Ð','Dj'),
alias = replace(alias,'ž','z'),
alias = replace(alias,'Þ','B'),
alias = replace(alias,'ß','Ss'),
alias = replace(alias,'à','a'),
alias = replace(alias,'á','a'),
alias = replace(alias,'â','a'),
alias = replace(alias,'ã','a'),
alias = replace(alias,'ä','a'),
alias = replace(alias,'å','a'),
alias = replace(alias,'æ','a'),
alias = replace(alias,'ç','c'),
alias = replace(alias,'è','e'),
alias = replace(alias,'é','e'),
alias = replace(alias,'ê','e'),
alias = replace(alias,'ë','e'),
alias = replace(alias,'ì','i'),
alias = replace(alias,'í','i'),
alias = replace(alias,'î','i'),
alias = replace(alias,'ï','i'),
alias = replace(alias,'ð','o'),
alias = replace(alias,'ñ','n'),
alias = replace(alias,'ò','o'),
alias = replace(alias,'ó','o'),
alias = replace(alias,'ô','o'),
alias = replace(alias,'õ','o'),
alias = replace(alias,'ö','o'),
alias = replace(alias,'ø','o'),
alias = replace(alias,'ù','u'),
alias = replace(alias,'ú','u'),
alias = replace(alias,'û','u'),
alias = replace(alias,'ý','y'),
alias = replace(alias,'ý','y'),
alias = replace(alias,'þ','b'),
alias = replace(alias,'ÿ','y'),
alias = replace(alias,'ƒ','f'),
alias = replace(alias, 'œ', 'oe'),
alias = replace(alias, '€', 'euro'),
alias = replace(alias, '$', 'dollars'),
alias = replace(alias, '£', ''),
alias = trim(alias),
alias = replace(alias, ' ', '-'),
alias = replace(alias, '--', '-') ;
Run Code Online (Sandbox Code Playgroud)
在这个例子中:
希望能帮助到你 !
小智 4
您当然可以使用 MySQL 进行字符串替换。官方文档列出了很多您可能会觉得有用的字符串函数。
\n\nSELECT REPLACE(\'Foo Bar!~~~~\', \'~\', \'\');\nSELECT LOWER(\'Foo Bar!\');\n
Run Code Online (Sandbox Code Playgroud)\n\n我也看到了这篇博文关于在 MySQL 中使用正则表达式的
\n\n更新:我提到的博客文章的详细信息:
\n\n所以我建议创建一个函数来执行正则表达式替换:
\n\nDELIMITER $$\nFUNCTION `regex_replace`(pattern varchar(1000),replacement varchar(1000),original varchar(1000))\nRETURNS varchar(1000)\nDETERMINISTIC\nBEGIN\nDECLARE temp VARCHAR(1000);\nDECLARE ch VARCHAR(1);\nDECLARE i INT;\nSET i = 1;\nSET temp = original;\nIF original REGEXP pattern THEN\n SET temp = "";\n loop_label: LOOP\n IF i>CHAR_LENGTH(original) THEN\n LEAVE loop_label;\n END IF;\n SET ch = SUBSTRING(original,i,1);\n IF NOT ch REGEXP pattern THEN\n SET temp = CONCAT(temp,ch);\n ELSE\n SET temp = CONCAT(temp,replacement);\n END IF;\n SET i=i+1;\nEND LOOP;\nEND IF;\nRETURN temp;\nEND$$\nDELIMITER ;\n
Run Code Online (Sandbox Code Playgroud)\n\n然后类似于以下内容
\n\nSELECT regex_replace(\'[^a-zA-Z0-9]+\', \'\', \'%$&?/\xe2\x80\x99|test><+-,][)(\' )\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您对这种方法不满意,您始终可以使用替换来运行一些更新调用
\n\nupdate db_products set Slug_Name = replace(Name, \'~\', \'\');\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
12447 次 |
最近记录: |