2017-03-13 6 views
1

필터링 결과를 날짜로 openquery을 사용하여 선택을 실행하려고하지만 where 절 뒤에 날짜를 사용하는 데 문제가 있습니다.Microsoft SQL Server - 쿼리 열기 where 날짜>

은 이상적으로는 통과 할 수 있도록하고 싶습니다 변수

set @d = dateadd(day, -30, getdate()) 

하지만 예를 위해 내가 지정한 날짜 사용하려고합니다

예 :

select * 
from OPENQUERY([Linked_Server], 'select id, name from Users where LastModifiedDate > ''2017-01-01''') 

이를 오류를 반환합니다 :

INVALID_FIELD:
select id, name from Users where LastModifiedDate > '2017-01-01'
value of filter criterion for field 'LastModifiedDate' must be of type dateTime and should not be enclosed in quotes".

예를 들어 istrue = true을 사용하면 문제가 없지만 날짜를 비교하면 문제가있는 것 같습니다.

누군가이 문제에 대해 조언 해 주시겠습니까?

답변

1

표준 SQL Server가 아닌 연결된 서버를 쿼리하는 것처럼 보이지만 대신 specific format for date and datetime literals 인 SOQL을 사용하는 Salesforce가 있습니다. 세일즈 포스 날짜 필터의 올바른 형식은 다음과 같습니다

WHERE LastModifiedDate > 2017-01-01T00:00:00Z 

그래서 전체 SQL은 다음과 같아야합니다

SELECT * 
FROM OPENQUERY(
    [Linked_Server], 
    'SELECT id, name FROM Users WHERE LastModifiedDate > 2017-01-01T00:00:00Z') 
+0

예, 내가 세일즈 포스에 연결했다 : 나는 절은 그런 일이었다 WHERE 내 메시지 탭에서 가지고 무엇

. 솔루션이 완벽하게 작동했습니다. 감사합니다. –

0

우리는 여기 열기 쿼리를 많이 사용하고 우리는 시나리오의 종류에 발견했습니다.

CONVERT(VARCHAR(11),@d,101) 

또는

CONVERT(VARCHAR(25),@d,126) 

이 이미 DavidG가 게시 된 형식으로 날짜를 변환 : 우리가 과거에했던 것은 이것이다.

또한 쿼리가 올바르게 나오는지 확인하기 위해 쿼리 텍스트를 변수에 할당 한 다음 print를 사용하여 변수를 보여줍니다.이 메시지는 메시지 탭에 표시되는 단순한 텍스트입니다 결과 집합 탭과 함께 Where 절이 단 두 개의 작은 따옴표로만 표시되는 한 의심스러운 경우 쿼리가 작동해야합니다. 두 번 표시된 작은 따옴표를 모두 하나의 작은 따옴표로 바꾸면 메시지를 복사하고 별도로 실행해야합니다.

WHERE thisdate BETWEEN ''02/27/2017'' AND ''2017-02-27T23:59:59.990''