我正在尝试使用下面的查询在SQL Server中获取记录。
SELECT TDC_ROW_NUMBER
, TDC_TD_PARTCODE
FROM TD_DATA_PACK_CONTENTS
WHERE TDC_IDP_ID = 841
AND TDC_TREE_FAMILY_CLASSIFICATION + ', ' + TDC_TREE_CLASSIFICATION + ', ' + TDC_TREE_SUB_CLASSIFICATION + ' , ' + 'A' IN
( SELECT DISTINCT DPC_Level1 + ', ' + DPC_Level2 + ', ' + DPC_Level3 + ', ' + DPC_Status
FROM DATA_PACK_CATEGORIES )
AND TDC_TRADE_PRICE > 0.99
AND TDC_STATUS = 'RDY'
现在问题是内部查询有一些记录,其中有前导或尾随空白字符。
所以记录看起来'Peripherals, Monitors, Monitors - Medical , A'
而另一个字符串看起来像'Peripherals, Monitors, Monitors - Medical, A'
。
显然,这在比较时失败了。那么有什么功能可以修剪整个字符串中的所有空白字符吗?
答案 0 :(得分:2)
使用REPLACE()
:
REPLACE(TDC_TREE_FAMILY_CLASSIFICATION + ', ' + TDC_TREE_CLASSIFICATION + ', ' + TDC_TREE_SUB_CLASSIFICATION + ' , ' + 'A', ' ', '') IN
(SELECT REPLACE(DPC_Level1 + ', ' + DPC_Level2 + ', ' + DPC_Level3 + ', ' + DPC_Status, ' ', '')
FROM DATA_PACK_CATEGORIES )
如果你只关心字符串开头/结尾的空格,你可以使用trim函数(实际上,最后忽略忽略的空格)。
您可以通过嵌套REPLACE()
来扩展上述其他字符。
答案 1 :(得分:1)
尝试:
REPLACE(REPLACE(text, ' ', ''),',',', ');
内部替换去除所有空格,当外部在每个逗号后添加单个空格时。
答案 2 :(得分:0)
如果您熟悉正则表达式并且正在使用Oracle(因为无论如何都是关于Oracle 10.x),那么有正则表达式支持。 REGEXP_LIKE和REGEXP_REPLACE的某种组合可以解决这个问题。举个例子:
declare
first_string varchar2(1000);
second_string varchar2(1000);
begin
select 'Peripherals, Monitors, Monitors - Medical , A' into first_string from dual;
select 'Peripherals, Monitors, Monitors - Medical, A' into second_string from dual;
DBMS_OUTPUT.PUT_LINE('Whitespace replacement on first_string yields: ' ||
REGEXP_REPLACE(first_string,'\s'));
DBMS_OUTPUT.PUT_LINE('Whitespace replacement on second_string yields: ' ||
REGEXP_REPLACE(second_string,'\s'));
if REGEXP_REPLACE(first_string,'\s') = REGEXP_REPLACE(second_string,'\s') then
DBMS_OUTPUT.PUT_LINE('Yes, they are the same, more or less');
else
DBMS_OUTPUT.PUT_LINE('My answer is, ''No''');
end if;
end;
当我运行它时,DBMS_OUTPUT是:
Whitespace replacement on first_string yields: Peripherals,Monitors,Monitors-Medical,A
Whitespace replacement on second_string yields: Peripherals,Monitors,Monitors-Medical,A
Yes, they are the same, more or less
答案 3 :(得分:0)
查看您的SQL,您可以使用:
SELECT DISTINCT DPC_Level1 + ', ' + DPC_Level2 + ', ' + rtrim(DPC_Level3) + ', ' + DPC_Status FROM DATA_PACK_CATEGORIES
而不是整个字符串上的暴力替换()。这假设尾随空格仅存在于DPC_Level3上 - 您可能希望将其添加到所有元素。