表中有字符串
+1-123-456-7890
11234567890
+1 1234567890
1777555999
我有变量$phoneNumber
。我想在sql查询中传递变量以获取匹配的记录。
例:
$phoneNumber
保留值1234567890
并使用相同的变量,我想在一个查询中获取以下记录
+1-123-456-7890
11234567890
+1 1234567890
我想在一个查询中选择两个记录。 如何将数据(11234567890)与上面保存的数字进行匹配?
答案 0 :(得分:2)
我们可以按照此处已经建议的替换逻辑结合正则表达式来执行此操作,以仅匹配您要定位的格式的电话号码:
WITH yourTable AS (
SELECT '+1-123-456-7890' AS phone UNION ALL
SELECT '+1 1234567890' UNION ALL
SELECT '+6512345678'
)
SELECT
phone,
REPLACE(REPLACE(REPLACE(phone, ' ', ''), '+', ''), '-', '') AS common_phone
FROM yourTable
WHERE phone REGEXP '\\+[0-9][[:space:]-][0-9]{3}-?[0-9]{3}-?[0-9]{4}';
答案 1 :(得分:0)
答案 2 :(得分:0)
如果$phonenumber
和您的字符串列都(可能)都具有麻烦的字符,那么用正则表达式很难解决。
where replace(replace(replace($phonenumber, ' ', ''), '-', ''), '+') = replace(replace(replace(phonecol, ' ', ''), '-', ''), '+')
答案 3 :(得分:0)
我在查询中使用replace()
解决了这个问题。
我从变量$phoneNumber
中删除了特殊字符(不是通过sql,而是在将varable传递给sql之前),并将其与replace的字符串结果进行了比较。 SELECT phone FROM myTable where REPLACE(REPLACE(REPLACE(phone, ' ', ''), '+', ''), '-', '') = $phoneNumber;
答案 4 :(得分:0)
重新考虑总体设计。
将电话号码之前放入表格中。这样,SELECT
和其他尚未写入的SELECTs
就会很简单。