2017-02-08 2 views
0

SQL Server에로드 된 모든 값을 가져 오는 스프레드 시트가 있습니다. 스프레드 시트의 필드 중 하나가 돈이됩니다. 이제는 모든 것을 정확하게 표시하기 위해 Money with DataType을 사용하여 필드에 필드를 추가했습니다.SQL Server vs 문자열의 데이터 형식 문제

스프레드 시트에서 값을 읽을 때이 값과 같이 String으로 저장합니다. "94259.4". SQL Server에 삽입되면 "94259.4000"처럼 보입니다. SQL에서 값을 가져올 때 SQL Server 값 0을 제거하는 방법이 있습니까? 왜냐하면이 두 값은 같지만이 두 값이 같기 때문입니다. Strings - 같은 가치가 없다고 생각합니다.

값이 다음과 같이 나타날 때 다른 문제가 발생할 것으로 예상됩니다 ... 94,259.40 나는 그 기간이 지나면 숫자를 2로 제한한다고 생각합니다. 그래서이 형식으로 서버에서 값을 선택하는만큼 94,259.40 - 나는 씬이 좋을 것입니다.

편집 :

For Column = 1 To 34 
    Select Case Column 
     Case 1 'Field 1 
      If Not ([String].IsNullOrEmpty(CStr(excel.Cells(Row, Column).Value)) Or CStr(excel.Cells(Row, Column).Value) = "") Then 
    strField1 = CStr(excel.Cells(Row, Column).Value) 
      End If 
     Case 2 'Field 2 
     ' and so on 

나는 각 필드를 통해 이동하여 문자열 값을 저장합니다. 그런 다음 DB와 비교하여 동일한 값을 가진 레코드가 있는지 확인합니다. 내 방식의 유일한 필드는 머니 필드입니다.

+0

스프레드 시트를 SQL Server에로드하는 데 어떤 도구를 사용합니까? – user3272686

+6

오래 전부터 배운 추악한 교훈 : 절대, 절대로, 절대로, 절대로, SQL Server에서 MONEY 데이터 형식을 사용하지 마십시오. 강아지가 상처를 입히고 우주에서 불균형을 일으 킵니다. –

+0

@ user3272686 - 스프레드 시트를 열고 값을 가져 오는 도구가 없습니다 (필드 지정 등) – BobSki

답변

1

당신은 문자열을 비교하는 형식()를 사용, 또는 예를 들어 플로트 수 있습니다

Declare @YourTable table (value money) 
Insert Into @YourTable values 
(94259.4000), 
(94259.4500), 
(94259.0000) 

Select Original = value 
     ,AsFloat = cast(value as float) 
     ,Formatted = format(value,'0.####') 
From @YourTable 

반환

Original AsFloat  Formatted 
94259.40 94259.4  94259.4 
94259.45 94259.45 94259.45 
94259.00 94259  94259 

나는 (그 형식을주의해야한다)는, 몇 가지 좋은 기능이 있습니다 하지만 성능에 대해 알 수는 없습니다.

0

핵심 문제는 문자열 정보가 숫자 정보를 나타내는 데 사용되고 있으므로 "123.400"과 "123.4"를 비교하고 불일치가 발생하는 문제입니다. 그들은 이어야합니다가 일치해야합니다. 그들은 문자열입니다.

데이터를 스프레드 시트에 적절한 형식으로 저장 한 다음 데이터베이스의 적절한 형식을 선택합니다.이 형식은 "Money"데이터 형식이 아닙니다 (섀도우를 삽입하고 오버 헤드를 돌고있는 독수리의 비전). 그렇지 않으면, 부적절하게 설계된 두 가지 솔루션간에 앞뒤로 갈 때 유형 간 변환이 확대되고 "제대로 작동하지 않는"사례가 점점 더 많아지고 더 많은 특수한 경우가 필요합니다 ... 등등.

+0

충분히 공정하게! 나에 의해 개발되지 않았고, 일할 필요가있다. – BobSki

+0

공정한 backatcha :) 비교를 위해 테이블에서 데이터를 가져 오기 위해 사용하는 쿼리를 게시 할 수 있습니까? –