2013-08-01 4 views
1

나는 아래의 코드를 사용하면 :선택에 GetDate() VB.net 다른 다음 SSMS를 통해에 GetDate()를 선택을 통해

Dim cmd As New OdbcCommand("SELECT GETDATE()", oConn) 
retVal = cmd.ExecuteScalar() 

결과 출력입니다 :

8/1/2013 10:10:39 AM 

나는 정확한 실행

Management Studio에서 직접 동일한 쿼리를 받았습니다.

2013-08-01 10:10:39.317 

일치하는 SQL Server 설정과 컴퓨터 설정을 비교할 때 .

누구나 내가 일치하는지 확인해야합니까?

특히 Date 형식 차이에 대해 이야기하고 있습니다.

+1

차이점은 30 분 사이의 설명이 필요하거나 서식을 변경했는지 여부입니다. –

+0

@Damien_The_Unbeliever 더 생각해 보면 30 분 차이가 더 크지 않다고 생각합니다. 결국 두 경우 모두 SQL Server 시간을 반환해야합니다. 나는 그가 단지 30 분 간격으로 달렸다고 생각한다. –

+0

내 문제는 미안 날짜 형식입니다. 그리고 예, 나는 서버와 기계가 동일한 설정을 가지고 있음을 보장했습니다. – sarchbold

답변

0

이 시도 :

net time \\SERVER_NAME 

참고 : 분명히 SERVER_NAME 당신의 SQL 서버 시스템의 이름입니다.

통화 결과가 30 분 차이가 있습니까?

+0

죄송합니다. 30 분 정도 소요되는 것은 아니며, 형식 차이에 관한 것입니다. – sarchbold

5

특정 문자열 형식의 날짜 출력을 원할 경우 CONVERT()에 스타일 번호를 사용할 수 있습니다.

SELECT CONVERT(CHAR(20), GETDATE(), 22), 
     CONVERT(CHAR(23), GETDATE(), 21); 

결과 : 그러나

-------------------- ----------------------- 
08/01/13 10:53:54 AM 2013-08-01 10:53:54.943 

, 당신은 당신이 그것을 표시하는 경우 해당 서식을 적용, 직접 표시 이외의 것들에 대한 날짜를 사용하는 경우 예를 들어. 다른 모든 용도의 경우 datetime 형식이어야하며 이 아닌을 문자열로 변환해야합니다.

실제 시간 값의 차이점에 관해서는 당신이 무슨 문제에 대해 이야기하고 있는지 명확하지 않지만, 30 분 간격으로이 쿼리를 실행했다고 생각됩니다. 그 시간대에 또는 그와 같은 시간대에 서버를 운영한다면 서버가 30 분 빠름을 느낄 수 있습니다. 다른 시간대에 있거나 어쩌면 시간 서비스를 사용하지 않는 사람 일 수도 있습니다. 응용 프로그램은 클라이언트의 시간/시간대를 절대 사용하지 않아야합니다. 특히 배포되는 경우에는 항상 서버에서 시간을 사용하십시오.

-3

코드를 더 깊이 들여다 보니 일부 진취적인 동료가 나중에이 쿼리에서 DMY 형식을 사용하도록 코드의 일부를 SQL 행에 추가 한 것으로 나타났습니다.

VB의 코드가 앱 컴퓨터에서 적절한 날짜를 반환합니다. 즉, 내 컴퓨터와 앱 컴퓨터간에 차이가 있어야한다는 의미입니다.

또 다른 코더가 동일한 문제에 부딪 혔습니다. 따라서 데이터베이스에서 가져온 SQL에 아래 코드를 추가하십시오.

이 DMY 형식을 사용하는 SQL을 강제

SET의 DATEFORMAT의 DMY ... 난 컴파일 된 코드를 제거하고 건조 서버 컴퓨터와 내 문제에서 EXE를 실행!

모두에게 감사드립니다.

+0

?? ? 질문에 언급 된 형식 중 어느 것도 DMY를 사용하지 않습니다. 그래서 당신의 "솔루션"은 어디서나 모든 것을 DMY로 만드는 것입니다. 왜? 쿼리를 쓰는 다음 사람이 SET DATEFORMAT 명령을 주입 할 수 있습니까? 혼란스러워. –

+0

나는 그것이 당신의 문제 사람인지 확신하지 못합니다. @AaronBertrand는 이미 당신에게 적절한 안주를주었습니다. – Zane

+0

다른 프로그래머가 그 코드를 입력하지 않았습니다. 내가 찾은 것은 내 컴퓨터 설정과 앱 서버간에 차이가 있다는 것입니다. 그래서 코드를 로컬에서 실행하면 날짜가 달라집니다. 다른 코더도 같은 문제가있었습니다. 그들의 해결책은 쿼리에 날짜 형식을 강제하는 것이 었습니다. 이 쿼리는 오류의 원인입니다. 내 솔루션은 그의 "수정"을 제거하는 것이 었습니다. 응용 프로그램 서버에서 응용 프로그램을 다시 열었고 모든 날짜가 다시 올바르게 나타났습니다. – sarchbold

1

날짜 형식이 없습니다. 형식은 날짜를 문자열로 변환 할 때만 작동합니다. 사용되는 형식은 변환을 수행하는 사람 (서버 또는 클라이언트)에 따라 다릅니다.

VB.NET 쿼리는 서버에서 날짜를 반환하고 콘솔이나 폼 등에 쓰면 문자열로 변환합니다. VB.NET은 프로그래머의 CurrentCulture를 사용하는데, 기본값은 현재 사용자의 지역 설정에서옵니다.

SSMS에서 데이터를 표시 할 때 ISO 형식이 사용되므로 데이터를 편집 할 때 모호하지 않습니다.

MyDate = '13/1/2013을 입력했기 때문에 날짜를 문자열 또는 암시 적으로 변환하여 쿼리에서 날짜와 문자열 값을 비교하면 열의 데이터 정렬을 사용하여 변환됩니다. 데이터 정렬은 상속되므로 데이터 정렬은 데이터베이스의 데이터 정렬과 동일합니다.