过去一直在寻找这个,我不认为嵌套替换是答案。我有一个我需要保持唯一性的电子邮件地址列表,但我需要将它们全部设为伪造以便进行测试。因此,我的想法是将“ .com”,“。net”,“。org”等替换为“ .mydomain.com”。但是总共有很多结尾。
我意识到我可以删除@并在其末尾添加'@ mydomain.com',但是现在我也想弄清楚如何解决这个特殊问题。
代替:
BEGIN TRANSACTION;
UPDATE Customer
SET Email=REPLACE(Email, '.com','.mydomain.com')
where email not like '%.mydomain.com%'
COMMIT TRANSACTION;
每种情况下的'.com','。net','。org'........
有没有办法说,在一个语句中用“ .mydomain.com”替换所有这些(“ .com”,“。net”,“。org”)?
类似这样的东西。
BEGIN TRANSACTION;
UPDATE Customer
SET Email=REPLACE(Email, (in ('.com', '.net', '.org')),'.mydomain.com')
where email not like '%.mydomain.com%'
COMMIT TRANSACTION;
答案 0 :(得分:1)
遵循KISS原则,只需运行3个独立的查询。
update Customer set email = replace(email, '.com', '.mydomain.com') where email not like '%.mydomain.com%';
update Customer set email = replace(email, '.net', '.mydomain.com') where email not like '%.mydomain.com%';
update Customer set email = replace(email, '.org', '.mydomain.com') where email not like '%.mydomain.com%';
答案 1 :(得分:0)
我认为类似的事情应该起作用。
UPDATE Customer
SET Email (case
where CHARINDEX(Email, '.com') > 0 then REPLACE(Email, '.com','.mydomain.com')
where CHARINDEX(Email, '.net') > 0 then REPLACE(Email, '.net','.mydomain.com')
where CHARINDEX(Email, '.org') > 0 then REPLACE(Email, '.org','.mydomain.com')
end)
where email not like '%.mydomain.com%'
可以用任何验证字符串是否包含子字符串的函数代替CHARINDEX
。
答案 2 :(得分:0)
另一种解决方案是使用嵌套的replace语句:
update Customer set email = replace(replace(email, '.com', '.mydomain.com'), '.net', '.mydomain.com')
您可以根据需要继续选择多个级别。您甚至可以动态生成替换语句。
另一种可能的解决方案是使用存储过程。
答案 3 :(得分:0)
您可以使用echo '<ul><li>'.$title1.'</li>';
echo '<li>'.$content1.'</li>';
echo '<li>'.$answer1.'</li></ul>';
来联接要替换的TLD的派生表。 (如果有,您也可以将“真实”表与TLD联接在一起。)
$qtitle =$_GET['id'];
$sql ="select Q1.title, Q1.content, Q1.answer from questionset_question as Q2";
$sql .=" inner join question as Q1 on Q1.question_id=Q2.question_id inner join questionset as Q3";
$sql .=" on Q3.questionset_id=Q2.questionset_id where Q3.title='$qtitle'";
if ($result = $db->query($sql)) {
while ($row = $result->fetch_assoc()) {
$title1=$row['Q1.title'];
$content1=$row['Q1.content'];
$answer1=$row['Q1.answer'];
echo '<ul><li>'.$title1.'</li>';
echo '<li>'.$content1.'</li>';
echo '<li>'.$answer1.'</li></ul>';
}
$result->free();
}
else {
echo "no result";
}
computed attribute constructor
尽管这样,如果与TLD匹配的子字符串位于末尾的其他位置,则无法解决问题。但这可能不是问题。