문제

MySQL에서

select * from record where register_date like '2009-10-10%'

SQL Server의 구문은 무엇입니까?

도움이 되었습니까?

해결책

DatePart () 함수를 사용할 수 있습니다

SELECT * FROM record 
WHERE  (DATEPART(yy, register_date) = 2009
AND    DATEPART(mm, register_date) = 10
AND    DATEPART(dd, register_date) = 10)

시간 구성 요소를 무시하고 다음 날의 날짜를 사용할 필요가 없기 때문에이 방법을 쉽게 읽을 수 있습니다. 적절한 날짜 부분 코드 (예 :

AND    DATEPART(hh, register_date) = 12)

12에서 1 사이의 기록을 얻습니다.

참조하십시오 MSDN DatePart 문서 유효한 인수의 전체 목록.

다른 팁

DateTime 변수에 대한 유사 연산자에 대한 직접적인 지원은 없지만 항상 DateTime을 Varchar에 캐스팅 할 수 있습니다.

SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'

을 체크하다 MSDN 문서 변환 함수에서 사용 가능한 "스타일"의 전체 목록.

마크

그렇게하면 문자열 변환을 강요하고 있습니다. 시작/종료 날짜 범위를 구축하고 사용하는 것이 좋습니다.

declare @start datetime, @end datetime
select @start = '2009-10-10', @end = '2009-11-10'
select * from record where register_date >= @start
           and register_date < @end

이렇게하면 인덱스가 사용될 수 있습니다 (on이있는 경우 register_date), 테이블 스캔 대신.

변환을 사용하여 날짜를 텍스트 양식으로 얻을 수 있습니다. Varchar (10)로 변환하면 다음과 같은 대신 = 사용할 수 있습니다.

select *
from record
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'

또는 상단 및 하한 날짜를 사용할 수 있으며 인덱스를 사용할 수 있다는 추가 이점이 있습니다.

select *
from record
where '2009-10-10' <= register_date
and register_date < '2009-10-11'

불행히도, 'like'를 사용하여 DateTime을 Varchar와 비교할 수는 없지만 원하는 출력은 다른 방식으로 가능합니다.

    select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0

Convert를 사용하여 Like를 사용하여 날짜를 검색 할 수 있습니다. 예를 들어,

select convert(VARCHAR(40),create_date,121) , * from sys.objects where     convert(VARCHAR(40),create_date,121) LIKE '%17:34%'

그만큼 LIKE 운영자는 월이나 날짜와 같은 날짜 부분과 함께 작동하지 않지만 DATEPART 운영자.

오픈 날짜가 1 일에있는 모든 계정을 찾기 위해 명령 :

SELECT * 
  FROM Account 
 WHERE DATEPART(DAY, CAST(OpenDt AS DATE)) = 1`

*주조 OpenDt 가치가 있기 때문입니다 DATETIME 그리고 단지 DATE.

SQL Server의 날짜에 대한 유사한 연산자에 대한 매우 플라스틱 적용 범위가 있습니다. 미국 날짜 형식을 사용하여 만 작동합니다. 예를 들어 시도 할 수 있습니다.

... WHERE register_date LIKE 'oct 10 2009%'

SQL Server 2005에서 이것을 테스트했지만 작동하지만 실제로 다른 조합을 시도해야합니다. 내가 알아 차린 이상한 것은 다음과 같습니다.

  • 예를 들어 'Apr 2%'를 검색하면 20 일만에 아무것도 얻지 못합니다. 2nd를 생략합니다.

  • 예를 들어 단일 밑줄 '_'를 사용하여 단일 (와일드 카드) 문자를 나타내는 것은 전적으로 작동하지 않습니다. WHERE mydate LIKE 'oct _ 2010%' ~ 할 것이다 ~ 아니다 모든 날짜를 반환하십시오 ~ 전에 10 일 - 실제로는 전혀 반환되지 않습니다!

  • 형식은 엄격한 미국인입니다. 'mmm dd yyyy hh:mm'

나는 몇 초 동안 프로세스를 못 박는 것이 어렵다는 것을 알게되었으므로 누군가가 이것을 조금 더 가져 가고 싶다면 내 손님이 되십시오!

도움이 되었기를 바랍니다.

나는이 스레드에 조금 늦었지만 실제로 MS SQL Server의 유사한 연산자에 대한 직접적인 지원이 있습니다.

Datatype이 문자열이 아닌 경우 Like Help에 문서화 된대로 문자열로 변환하려고합니다. 그리고 Cast Convert Documentation에 문서화 된대로 :

기본 DateTime String으로 변환하는 것은 Type 0 (, 100)입니다.

DB에서 이와 같은 날짜가있는 경우 :

2015-06-01 11:52:59.057

그리고 당신은 다음과 같은 쿼리를합니다.

select * from wws_invoice where invdate like 'Jun%'
select * from wws_invoice where invdate like 'Jun 1%'
select * from wws_invoice where invdate like 'Jun 1 %'
select * from wws_invoice where invdate like 'Jun 1 2015:%'
select * from wws_invoice where invdate like 'Jun ? 2015%'
...
select * from wws_invoice where invdate like 'Jun 1 2015 11:52AM'

당신은 그 행을 얻습니다.

그러나이 날짜 형식은 그것이 dateTime2, 그런 다음 문서화가 말합니다.

21 또는 121- 시간, 날짜, dateTime2 및 dateTimeOffset에 대한 ODBC 표준 (밀리 초) 기본값. -YYYY-MM-DD HH : MI : SS.MMM (24H)

더 쉽고 사용할 수 있습니다.

select * from wws_invoice where invdate like '2015-06-01%'

송장 기록을 받으십시오. 데모 코드는 다음과 같습니다.

DECLARE @myDates TABLE (myDate DATETIME2);
INSERT INTO @myDates (myDate)
VALUES
('2015-06-01 11:52:59.057'),
('2015-06-01 11:52:59.054'),
('2015-06-01 13:52:59.057'),
('2015-06-01 14:52:59.057');

SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11:52:59%';
SELECT * FROM @myDates WHERE myDate LIKE '2015-06-01 11:52:59.054%';

String으로 변환하지 않고 SQL Server에서 DateTime 검색을 수행하는 것은 항상 문제가되었습니다. 각 날짜 부분을 얻는 것은 과잉입니다 (인덱스를 사용하지는 않을 것입니다). 문자열 변환을 사용하지 않을 때 더 나은 방법은 범위 검사를 사용하는 것입니다. 즉:

select * from record 
where register_date >= '20091010' and register_date < '20091011';

나는 그런 식으로 내 문제를 해결했다. 개선에 대한 제안에 감사드립니다. C#의 예.

string dd, mm, aa, trc, data;
dd = nData.Text.Substring(0, 2);
mm = nData.Text.Substring(3, 2);
aa = nData.Text.Substring(6, 4);
trc = "-";
data = aa + trc + mm + trc + dd;

"Select * From bdPedidos Where Data Like '%" + data + "%'";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top