2012-04-17 2 views
1

유형이 varchar 인 데이터베이스에서 데이터를 검색하고 싶습니다. 예 : 크기 : 100mm, 100mm, 20mm, 500mm, 450mm 및 trim ' mm '을 문자열로 변환하고 정수로 변환하고 같은 열에서 비교하는 것보다 : @ Size1 < = size_column 및 @ size2> = size_column :단일 SQL 쿼리에서 SQL DB의 문자열을 잘라내어 변환하고 비교하십시오.

여기 내 트림 및 변환 할 쿼리가 있지만 오류가 발생합니다. .

SELECT DEVICE_NO, 
CASE [Rms_Size] 
WHEN 
(SELECT RMS_SIZE FROM DW_DATA.DBO.DIM_DEVICE WHERE 
Ltrim(Rtrim(Rms_Size)) LIKE '%mm') 
THEN 
(SELECT SUBSTRING(Rms_Size,1,LEN(rms_size)-2) 
FROM DW_DATA.DBO.DIM_DEVICE 
where Ltrim(Rtrim(Rms_Size)) LIKE '%mm') 
ELSE 
RMS_SIZE 
END 
AS RMS_SIZE 
FROM 
DW_DATA.DBO.DIM_DEVICE 

답변

2

이 시도 - :

SELECT 
    DEVICE_NO, 
    CASE 
     WHEN 
     LTRIM(RTRIM(Rms_Size)) LIKE '%mm' 
     THEN 
     SUBSTRING(Rms_Size,1,LEN(rms_size)-2) 
     ELSE 
     RMS_SIZE 
     END 
     AS RMS_SIZE 
FROM DW_DATA.DBO.DIM_DEVICE 
0
create table mytable(
mystring varchar(100)) 

insert into mytable values('100mm') 
insert into mytable values('100') 

create Function removeChars(@mainString VarChar(100)) 
Returns VarChar(1000) 
AS 
BEGIN 
    WHILE PatIndex('%[^0-9]%', @mainString) > 0 BEGIN 
     Set @mainString = Stuff(@mainString, PatIndex('%[^0-9]%', @mainString), 1, '') 
    END 

    Return @mainString 
END 

select * 
from mytable 
where dbo.removeChars(mystring) >50 
관련 문제