MS SQL에서 WHERE 절 내에 IF 절을 사용할 수 있나요?
예:
WHERE
IF IsNumeric(@OrderNumber) = 1
OrderNumber = @OrderNumber
ELSE
OrderNumber LIKE '%' + @OrderNumber + '%'
CASE]1 문 사용 업데이트: 이전 구문(몇몇 사람들이 지적한 대로)은 작동하지 않습니다. 다음과 같이 CASE를 사용할 수 있습니다:
WHERE OrderNumber LIKE
CASE WHEN IsNumeric(@OrderNumber) = 1 THEN
@OrderNumber
ELSE
'%' + @OrderNumber
END
또는 @N. J. Reed가 지적한 것처럼 IF 문을 사용할 수 있습니다.
이 경우 또는 케이스 없이 할 수 있어야 합니다.
WHERE
(IsNumeric(@OrderNumber) AND
(CAST OrderNumber AS VARCHAR) = (CAST @OrderNumber AS VARCHAR)
OR
(NOT IsNumeric(@OrderNumber) AND
OrderNumber LIKE ('%' + @OrderNumber))
Sql 에서 방송 면변형하기 맛깔 따라 할 수 있습니다 주문 번호 충족되었으며 INT 또는 VARCHAR 암시적입니다 여부에 따라 방송 지원됩니다.
이것은 매우 일반적인 의 where 절. 적용할 경우 일부 " IF"; 로직 where 절을 해야 할 것은 필요한 모든 조건을 갖춘 만큼 추가 부울을 섹션 및 필요한 곳에 적용됩니다.
이렇게 좋은 방법이 있는데, t isn& # 39 에서 SQL. 일부 외곽진입 제가 지금까지 보아온 것.
WHERE
OrderNumber = CASE
WHEN (IsNumeric(@OrderNumber) = 1)
THEN CONVERT(INT, @OrderNumber)
ELSE -9999 -- Some numeric value that just cannot exist in the column
END
OR
FirstName LIKE CASE
WHEN (IsNumeric(@OrderNumber) = 0)
THEN '%' + @OrderNumber
ELSE ''
END
IF (IsNumeric(@OrderNumber)) = 1
BEGIN
SELECT * FROM Table
WHERE @OrderNumber = OrderNumber
END ELSE BEGIN
SELECT * FROM Table
WHERE OrderNumber LIKE '%' + @OrderNumber
END
The 3rd 외곽진입 있지만, s # 39 는 사용할 수 있는 거의 유일한 쓴다 it& 생각하노라 경우 다양한 환경에 많은 것을 좋아한다.
CASE 문이 필요합니다.
WHERE OrderNumber LIKE
CASE WHEN IsNumeric(@OrderNumber)=1 THEN @OrderNumber ELSE '%' + @OrderNumber END
내 생각에 오카시스텐스 where.like/ = 불 (bool) 값들 함께 사용할 수 있다. T-sql 사용하고 있습니다.
시나리오: # 39 라고 let&, s, s # 39 는 Person-30& 가져올 경우 # 39 의 경우, 취미, 취미 및 Person-42& 부울 거짓값 부울 그렇다. (일부, 특히 취미로 조회 따르면 90% 이상의 이슬람세를 계산 주기 때문에 닫으십시오 업무 담당자.).
CREATE PROCEDURE sp_Case
@bool bit
AS
SELECT Person.Hobbies
FROM Person
WHERE Person.ID =
case @bool
when 0
then 30
when 1
then 42
end;
다음 예제에서는 질의 실행하므로 일부로 부울입니다 표현식에서는 약간 다른 결과를 바탕으로 다음 실행하므로 기술서임을 블록 부울입니다 표현식입니다. 각 문 블록을 시작하는 완료하는지 시작하고 종료.
USE AdventureWorks2012;
GO
DECLARE @AvgWeight decimal(8,2), @BikeCount int
IF
(SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ) > 5
BEGIN
SET @BikeCount =
(SELECT COUNT(*)
FROM Production.Product
WHERE Name LIKE 'Touring-3000%');
SET @AvgWeight =
(SELECT AVG(Weight)
FROM Production.Product
WHERE Name LIKE 'Touring-3000%');
PRINT 'There are ' + CAST(@BikeCount AS varchar(3)) + ' Touring-3000 bikes.'
PRINT 'The average weight of the top 5 Touring-3000 bikes is ' + CAST(@AvgWeight AS varchar(8)) + '.';
END
ELSE
BEGIN
SET @AvgWeight =
(SELECT AVG(Weight)
FROM Production.Product
WHERE Name LIKE 'Touring-3000%' );
PRINT 'Average weight of the Touring-3000 bikes is ' + CAST(@AvgWeight AS varchar(8)) + '.' ;
END ;
GO
네스트된 이프리얼스 사용하여 명령문입니다. 그 안에 다른 기술서임을 중첩할 수 있습니다 다음 예제에서와 경우 방법. @Number 변수를 설정하고, 5, 50, 500gb 각 테스트하려면 발표했다.
DECLARE @Number int
SET @Number = 50
IF @Number > 100
PRINT 'The number is large.'
ELSE
BEGIN
IF @Number < 10
PRINT 'The number is small'
ELSE
PRINT 'The number is medium'
END ;
GO
WHERE OrderNumber LIKE CASE WHEN IsNumeric(@OrderNumber) = 1 THEN @OrderNumber ELSE '%' + @OrderNumber END
케이스 찼음을 줄을 작동하지 않습니다.
If @LstTransDt is Null
begin
Set @OpenQty=0
end
else
begin
Select @OpenQty=IsNull(Sum(ClosingQty),0)
From ProductAndDepotWiseMonitoring
Where Pcd=@PCd And PtpCd=@PTpCd And TransDt=@LstTransDt
end
See if this 도움이 됩니다.
USE AdventureWorks2012;
GO
IF
(SELECT COUNT(*) FROM Production.Product WHERE Name LIKE 'Touring-3000%' ) > 5
PRINT 'There are more than 5 Touring-3000 bicycles.'
ELSE PRINT 'There are 5 or less Touring-3000 bicycles.' ;
GO