Toon posts:

[SQL] Numeric field > Comma / Dot

Pagina: 1
Acties:
  • 127 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Zit met een probleem, heb een field in een database (sql2005) type numeric(3,1). In de SQL management studio kun je een waarde als: "3,4" invoeren. Van "3.4" wordt 34 gemaakt. Bij een INSERT statement via een Stored Procedure is de komma echter een probleem:

"Error converting data type varchar to numeric."

Een punt daarentegen niet, maar die wordt afgerond.

Kom er niet uit (kan er geen nuttige info over vinden) Regional settings op server staan op Dutch database collection is "Latin1_General_CI_AI".

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:27

mulder

ik spuug op het trottoir

Je moet de CurrentLanguage in je connectiestring op Nederlands zetten. Als je een webapplicatie gebruikt kun je ook nog de globalization tag in de web.config zetten om te zorgen dat de applicatie zelf er ook goed mee omgaat.

[ Voor 20% gewijzigd door mulder op 19-03-2007 19:04 ]

oogjes open, snaveltjes dicht


  • MacWebber
  • Registratie: September 2000
  • Niet online
Hoe ziet je insert statement eruit? De melding over de varchar conversie doet me vermoeden dat er quotes om je getal heen staan; dus iets in de trend van

SQL:
1
insert into tbl values ('3,4')


Dat gaat niet werken omdat (voor zover ik weet) SQL intern altijd de Amerikaanse/Engelse notatie gebruikt (met punt als decimaal scheidingsteken).

Zou dus moeten zijn:

SQL:
1
insert into tbl values (3.4)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Waarom geef je dan die parameter mee als een varchar ?
Definieer je parameter als decimal

https://fgheysels.github.io/


Verwijderd

Topicstarter
oke Stored Procedure:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[EditCompactCamera]

           @spec_id int,    
           @camera_brand smallint,
           @camera_fullname varchar(75),
           @camera_ean numeric,
           @camera_artfabr varchar(75),
           @bodytype smallint,
           @bodycolor smallint,
           @size_b numeric,
           @size_h numeric,
           @size_d numeric,
           @weight numeric,
           @introducedin numeric,
           @available smallint,
           @megapixels smallint,
           @sensortype smallint,
           @sensorsize smallint,
           @maxresolutionsize varchar(20),
           @imageratio varchar(50),
           @startuptime varchar(10),
           @shutterdelay varchar(10),
           @lcdsize smallint,
           @lensmmfrom numeric,
           @lensmmto numeric,
           @lensaperturefrom smallint,
           @lensapertureto smallint,
           @lenscontruction varchar(350),
           @opticalzoom numeric,
           @digitalzoom numeric,
           @opticalviewfinder smallint,
           @autofocus_type varchar(50),
           @autofocus_system varchar(350),
           @autofocus_lockoption smallint,
           @auotfocus_light smallint,
           @whitebalance_options varchar(350),
           @shortfocusdistance numeric,
           @stabilization smallint,
           @stabilization_info varchar(350),
           @isofrom smallint,
           @isoto smallint,
           @iso_info varchar(350),
           @maxframessecond numeric,
           @maxframessecond_info varchar(350),
           @shootprograms varchar(500),
           @shutterspeedfast numeric,
           @shutterspeedlow numeric,
           @shutterspeed_info varchar(350),
           @selftimer smallint,
           @selftimer_info varchar(350),
           @aperture_program smallint,
           @shutterspeed_program smallint,
           @metering varchar(50),
           @meteringcompasation varchar(350),
           @memorystoretype varchar(50),
           @fileformats varchar(50),
           @fileformats_info varchar(350),
           @flash_buildin smallint,
           @flash_guidenr numeric,
           @flash_programs varchar(350),
           @flash_external smallint,
           @video_available smallint,
           @video_recordsount smallint,
           @video_resolution smallint,
           @video_fileformat smallint,
           @power_type smallint,
           @power_info varchar(350),
           @adapterincluded int,
           @adapterinfo varchar(350),
           @pcconnections varchar(50),
           @directprint smallint

AS
BEGIN

    SET NOCOUNT ON;

UPDATE [CAMERA].[dbo].[camera_compact_specs]
      SET [camera_brand] = @camera_brand,
       [camera_fullname] = @camera_fullname,
       [camera_ean] = @camera_ean,
       [camera_artfabr] = @camera_artfabr,
       [bodytype] = @bodytype,
       [bodycolor] = @bodycolor,
       [size_b] = @size_b,
       [size_h] = @size_h,
       [size_d] = @size_d,
       [weight] = @weight,
       [introducedin] = @introducedin,
       [available] = @available,
       [megapixels] = @megapixels,
       [sensortype] = @sensortype,
       [sensorsize] = @sensorsize,
       [maxresolutionsize] = @maxresolutionsize,
       [imageratio] = @imageratio,
       [startuptime] = @startuptime,
       [shutterdelay] = @shutterdelay,
       [lcdsize] = @lcdsize,
       [lensmmfrom] = @lensmmfrom,
       [lensmmto] = @lensmmto,
       [lensaperturefrom] = @lensaperturefrom,
       [lensapertureto] = @lensapertureto,
       [lenscontruction] = @lenscontruction,
       [opticalzoom] = @opticalzoom,
       [digitalzoom] = @digitalzoom,
       [opticalviewfinder] = @opticalviewfinder,
       [autofocus_type] = @autofocus_type,
       [autofocus_system] = @autofocus_system,
       [autofocus_lockoption] = @autofocus_lockoption,
       [auotfocus_light] = @auotfocus_light,
       [whitebalance_options] = @whitebalance_options,
       [shortfocusdistance] = @shortfocusdistance,
       [stabilization] = @stabilization,
       [stabilization_info] = @stabilization_info,
       [isofrom] = @isofrom,
       [isoto] = @isoto,
       [iso_info] = @iso_info,
       [maxframessecond] = @maxframessecond,
       [maxframessecond_info] = @maxframessecond_info,
       [shootprograms] = @shootprograms,
       [shutterspeedfast] = @shutterspeedfast,
       [shutterspeedlow] = @shutterspeedlow,
       [shutterspeed_info] = @shutterspeed_info,
       [selftimer] = @selftimer,
       [selftimer_info] = @selftimer_info,
       [aperture_program] = @aperture_program,
       [shutterspeed_program] = @shutterspeed_program,
       [metering] = @metering,
       [meteringcompasation] = @meteringcompasation,
       [memorystoretype] = @memorystoretype,
       [fileformats] = @fileformats,
       [fileformats_info] = @fileformats_info,
       [flash_buildin] = @flash_buildin,
       [flash_guidenr] = @flash_guidenr,
       [flash_programs] = @flash_programs,
       [flash_external] = @flash_external,
       [video_available] = @video_available,
       [video_recordsount] = @video_recordsount,
       [video_resolution] = @video_resolution,
       [video_fileformat] = @video_fileformat,
       [power_type] = @power_type,
       [power_info] = @power_info,
       [adapterincluded] = @adapterincluded,
       [adapterinfo] = @adapterinfo,
       [pcconnections] = @pcconnections,
       [directprint] = @directprint
 WHERE [spec_id] = @spec_id
END


De query die gevoert wordt:

EditCompactCamera '101', '10', 'Digital IXUS 60', '8714574965970', '1080B007AA', '12', '10', '86', '54', '22', '140', '2006', '1', '12', '10', '10', '2816 x 1231', '11', '', '', '13', '35', '105', '20', '45', '6 elements in 5 groups (2 UA elements)', '2.7', '5', '1', '11', '9-punts AiAF, 1-punt AF (vast in midden)', '1', '1', 'TTL meetsysteem met voorkeuzes: Automatisch, Daglicht, Bewolkt, Gloeilamp, TL licht, TL licht sterk, Flitser, Door gebruiker te bepalen', '3', '0', '', '14', '24', 'AUTO, High ISO Auto, 80, 100, 200, 400, 800', '2', 'Maximaal 2.1 beelden per seconde', 'Automatisch, Handmatig, Digitale macro, Portret, Night Snapshot, Stitch Assist, Movie, Speciale scène (Gebladerte, Sneeuw, Strand, Vuurwerk, Onderwater, Binnenshuis, Kinderen & Huisdieren, Kleuraccent, Kleuromwisseling)', '1500', '15', 'Sluitertijden van 1 sec. en langer zijn alleen beschikbaar in de Lange sluiter mode. Sluitertijden van 1,3 sec. en langer werken met ruisreductie.', '1', '', '0', '0', '10, 14, 15', '-2EV - +2EV met 1/3EV stappen', '10, 14', '10', 'JPEG compressie, (Exif 2.2 [Exif Print] compatibel) / Design rule for Camera File systeem, Digital Print Order Format [DPOF] Versie 1.1 compatibel.', '1', '2', '10, 11, 12, 13', '1', '1', '1', '12', '12', '10', 'Oplaadbare Li-ion accu Canon NB-4L', '1', 'Optioneel, AC Adapterset ACK-DC30', '10', '1'


Gaat om die 2.7

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:24

gorgi_19

Kruimeltjes zijn weer op :9

Blijft de vraag van whoami staan, waarom een varchar en geen decimal?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Mijn vraag is juist waarom hij 2,7 ziet als VARCHAR. 2.7 invoeren werkt vlekkenloos, zij het dat op welke manier dan ook dit wordt afgerond naar 3.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:24

gorgi_19

Kruimeltjes zijn weer op :9

Omdat je zelf zegt dat het een varchar is door het gebruik van de single quotes?
SQL:
1
'2.7'

is tekst
SQL:
1
2.7

is een nummer.

[ Voor 33% gewijzigd door gorgi_19 op 19-03-2007 19:49 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Verwijderd schreef op maandag 19 maart 2007 @ 19:45:
Mijn vraag is juist waarom hij 2,7 ziet als VARCHAR. 2.7 invoeren werkt vlekkenloos, zij het dat op welke manier dan ook dit wordt afgerond naar 3.
omdat je parameter als varchar gedefinieerd is?
2.7 is een geldige decimal; je parameter is een varchar, maar je veld is waarschijnlijk als decimal gedefinieerd; de (impliciete) conversie lukt.
2,7 is niet te converteren naar decimal; 2,700 dan weer wel (= 2700).

https://fgheysels.github.io/


Verwijderd

Topicstarter
Oke quotes weg:

EditCompactCamera '101', '10', 'Digital IXUS 60', '8714574965970', '1080B007AA', '12', '10', '86', '54', '22', '140', '2006', '1', '12', '10', '10', '2816 x 1231', '11', '', '', '13', '35', '105', '20', '45', '6 elements in 5 groups (2 UA elements)', 2.7, '5', '1', '11', '9-punts AiAF, 1-punt AF (vast in midden)', '1', '1', 'TTL meetsysteem met voorkeuzes: Automatisch, Daglicht, Bewolkt, Gloeilamp, TL licht, TL licht sterk, Flitser, Door gebruiker te bepalen', '3', '0', '', '14', '24', 'AUTO, High ISO Auto, 80, 100, 200, 400, 800', '2', 'Maximaal 2.1 beelden per seconde', 'Automatisch, Handmatig, Digitale macro, Portret, Night Snapshot, Stitch Assist, Movie, Speciale scène (Gebladerte, Sneeuw, Strand, Vuurwerk, Onderwater, Binnenshuis, Kinderen & Huisdieren, Kleuraccent, Kleuromwisseling)', '1500', '15', 'Sluitertijden van 1 sec. en langer zijn alleen beschikbaar in de Lange sluiter mode. Sluitertijden van 1,3 sec. en langer werken met ruisreductie.', '1', '', '0', '0', '10, 14, 15', '-2EV - +2EV met 1/3EV stappen', '10, 14', '10', 'JPEG compressie, (Exif 2.2 [Exif Print] compatibel) / Design rule for Camera File systeem, Digital Print Order Format [DPOF] Versie 1.1 compatibel.', '1', '2', '10, 11, 12, 13', '1', '1', '1', '12', '12', '10', 'Oplaadbare Li-ion accu Canon NB-4L', '1', 'Optioneel, AC Adapterset ACK-DC30 maxlength= maxlength= maxlength= maxlength= maxlength= maxlength= maxlength= maxlength= maxlength=', '10', '1'

Veld wordt (ondanks dat het het numeric(3,1) is nog steeds afgerond naar 3

Verwijderd

Topicstarter
Oops :$

In Stored Proc staat natuurlijk:

@opticalzoom numeric,

dat veranderd naar

@opticalzoom numeric(3,1),

en lost het op. Thnx voor jullie hulp

Gr, een amateur :)

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Die hele opticalzoom kan je ook wel wegdoen, aangezien dat lensmmto / lensmmfrom is. Zeer simpel herleidbare data dus. :)

{signature}


  • __fred__
  • Registratie: November 2001
  • Laatst online: 29-11 20:34
Roep je stored procedure in je code ook parametrized aan ipv direct een stuk SQL string concatenaten. Scheelt je ook een hoop van dit soort conversieproblemen.
Pagina: 1