我有两个包含这些列的表:
CREATE TABLE #temp
(
Phone_number varchar(100) -- example data: "2022033456"
)
CREATE TABLE orders
(
Addons ntext -- example data: "Enter phone:2022033456<br>Thephoneisvalid"
)
我必须使用'LIKE'加入这两个表,因为电话号码的格式不同。小背景我加入电话号码上的#temp表,其Addons值为orders表。然后在WHERE条件下我试图匹配它们并获得一些结果。这是我的代码。但我得到的结果并不准确。由于它没有返回任何数据。我不知道我做错了什么。我正在使用SQL Server。
select
*
from
order_no as n
join
orders as o on n.order_no = o.order_no
join
#temp as t on t.phone_number like '%'+ cast(o.Addons as varchar(max))+'%'
where
t.phone_number = '%' + cast(o.Addons as varchar(max)) + '%'
答案 0 :(得分:0)
您无法在JOIN条件中使用LIKE语句。请提供有关您的牌桌的更多信息。您必须将其中一个电话字段的格式转换为使用其他电话字段格式进行编译才能加入。
答案 1 :(得分:0)
我认为您的join
条件的顺序错误。因为你的问题明确提到了两个表,所以我们坚持下去:
select *
from orders o JOIN
#temp t
on cast(o.Addons as varchar(max)) like '%' + t.phone_number + '%';
我处理text
数据类型(在SQL Server中)已经很久了,我不记得cast()
是否有必要。
答案 2 :(得分:0)
您应该将转换投影应用于orders
表,并将其用作子查询,而不是尝试在单个顶级查询中执行所有操作,这将使查询更易于理解。
使用CHARINDEX
功能会使这更容易,但不支持ntext
,您需要更改架构以使用nvarchar(max)
- 您应该这样做无论如何,ntext
已被弃用,幸运的是您可以使用CONVERT( nvarchar(max), someNTextValue )
,但这会降低性能,因为您无法在ntext
值上使用任何索引 - 但此查询将运行无论如何,慢慢地。
SELECT
orders2.*,
CASE WHEN orders2.PhoneStart > 0 AND orders2.PhoneEnd > 0 THEN
SUBSTRING( orders2.Addons, orders2.PhoneStart, orders2.PhoneEnd - orders2.PhoneStart )
ELSE
NULL
END AS ExtractedPhoneNumber
FROM
(
SELECT
orders.*, -- never use `*` in production, so replace this with the actual columns in your orders table
CHARINDEX('Enter phone:', Addons) AS PhoneStart,
CHARINDEX('<br>Thephoneisvalid', AddOns, CHARINDEX('Enter phone:', Addons) ) AS PhoneEnd
FROM
orders
) AS orders2
我建议将上述内容转换为VIEW
或CTE
,以便您可以在JOIN表达式中直接查询:
CREATE VIEW ordersWithPhoneNumbers AS
-- copy and paste the above query here, then execute the batch to create the view, you only need to do this once.
然后你可以像这样使用它:
SELECT
* -- again, avoid the use of the star selector in production use
FROM
ordersWithPhoneNumbers AS o2 -- this is the above query as a VIEW
INNER JOIN order_no ON o2.order_no = order_no.order_no
INNER JOIN #temp AS t ON o2.ExtractedPhoneNumber = t.phone_number
实际上,我收回了之前关于效果的评论 - 如果您在ExtractedPhoneNumber
视图的ordersWithPhoneNumbers
列中添加索引,那么您将获得良好的效果。