db_products
桌子:
| ID | Name |
| 40 | Foo Bar!~~~~ |
我想生成一个子弹名称列:
| ID | Name | Slug_Name |
| 40 | Foo Bar!~~~~ | foo-bar |
可以通过SQL实际完成吗?还是我需要使用其他语言编写脚本?
编辑:我正在使用此函数在PHP中生成段塞:
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;
}
到目前为止,我的SQL技能还很基本。
ALTER TABLE db_products ADD Slug_Name VARCHAR
如何Slug_Name = toSlug(Name)
在SQL中遍历每一行并进行设置?
您当然可以使用MySQL进行字符串替换。在官方文件列出相当多的字符串函数您可能会发现有用的。
SELECT REPLACE('Foo Bar!~~~~', '~', '');
SELECT LOWER('Foo Bar!');
我还浏览了有关在MySQL中使用正则表达式的博客文章。
更新:我提到的博客文章的详细信息:
因此,我建议创建一个用于执行正则表达式替换的函数:
DELIMITER $$
FUNCTION `regex_replace`(pattern varchar(1000),replacement varchar(1000),original varchar(1000))
RETURNS varchar(1000)
DETERMINISTIC
BEGIN
DECLARE temp VARCHAR(1000);
DECLARE ch VARCHAR(1);
DECLARE i INT;
SET i = 1;
SET temp = original;
IF original REGEXP pattern THEN
SET temp = "";
loop_label: LOOP
IF i>CHAR_LENGTH(original) THEN
LEAVE loop_label;
END IF;
SET ch = SUBSTRING(original,i,1);
IF NOT ch REGEXP pattern THEN
SET temp = CONCAT(temp,ch);
ELSE
SET temp = CONCAT(temp,replacement);
END IF;
SET i=i+1;
END LOOP;
END IF;
RETURN temp;
END$$
DELIMITER ;
然后类似于以下内容
SELECT regex_replace('[^a-zA-Z0-9]+', '', '%$&?/鈥檤test><+-,][)(' )
如果您对这种方法不满意,则始终可以使用replace运行一些更新调用
update db_products set Slug_Name = replace(Name, '~', '');
我创建了一个通过spring数据自动创建查询的方法。问题出在返回参数上,因为与名称定义不匹配。实际上,通过只指定一个参数,它返回4个参数。 springData方法是:
问题内容: @Column(name=”DateOfBirth”) private Date dateOfBirth; 我特别需要上面的代码来创建一个名为“DateOfBirth”的列,相反,Hibernate为我提供了一个名为date_of_birth的列。我该如何更改?有没有web.xml属性?我遇到了DefaultNamingStrategy和改进的NamingStrategy,但是不确定如
问题内容: 在Java中,这些之间有什么区别: 我已经多次检查过Javadoc,但这从来不能很好地解释它。我也进行了测试,但没有反映出调用这些方法背后的任何实际含义。 问题答案: 如果不确定某件事,请尝试先编写测试。 我这样做: 印刷品: 最后一个块中有一个空条目,其中返回一个空字符串。 结果是: 该 名称 是您愿意使用动态加载与类,例如,调用的名称与默认。在一定范围内,所有类都有唯一的名称。 该
每次我用Android Studio(1.02)运行一个项目时,它都会生成一个未签名的apk,该apk位于..\build\outputs\apk文件夹中,默认情况下获得名称“app-debug.apk”
问题内容: 我正在尝试使用BCP将存储过程导出到.csv文件。它确实为我提供了.CSV格式的输出文件,但它不显示列名。下面是脚本。请看看,让我知道我在想什么 问题答案: 经过大量的跟踪和错误之后,下面是有关如何添加列的答案 首先创建一个header.txt文件(在头文件中添加所有头文件),例如,如果头文件需要名字,姓氏等 第二,将以下查询粘贴到您的存储过程中
问题内容: 我数据库中的列名称之一是两个字长,包括一个空格,即:。我正在使用SELECT并引用列名称来提取所需的数据。现在,如果我将该列命名,则我的SELECT可以工作,但如果使用,则不能。它说 “字段列表”中的“未知”列“区域” 有想法吗? 问题答案: 使用反引号。