Discussion:
konwersja nvarchar
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Grzegorz Gruza
2003-09-18 06:32:33 UTC
Permalink
Czesc,
w jaki sposób skonwertować typ nvarchar(>2) na float?
Konkretnie chodzi o dane numeryczne z zalinkowanego servera OLAP pobierane
za
pomoca skladni MDX w OPENQUERY.Mimo ze pole w kostce jest typu Double to w
sqlu
otrzymuje nvarchar a potrzbuje jakiegos typu numerycznego.
[...]
Może CONVERT?

Pozdrawiam

--
Grzegorz Gruza
***@spamerom_niepriv4.onet.pl
Odpowiadając usuń spamerom_nie z adresu
Sobota
2003-09-18 07:33:13 UTC
Permalink
Czesc.
Dzieki za zainteresowanie ale problem jest bardziej zlozony.
Convert i cast na float dzialaja dla nvarchar(<=2) i varchar(<=2) czyli danych
zapisanych na 4 bajtach, natomiast ja potrzebuje skonwertowac nvarchar(>2) na
float.
Przyklad:
convert(float(53),[Pole_nvarchar(>2)]) dziala dla Pole_nvarchar=234,4 ale dla
Pole_nvarchar=3040,3 juz nie.
Moim zdaniem jest to problem z iloscia bajtow przyznawanych dla danego typu:
float jest na 4 bajtach natomiast nvarchar moze miec wiekszy rozmiar.Chociaz z
drugiej strony np. w C mozna konwertowac char[30] na float (atof)-natomiast nie
wiem jak to wyglada w sqlu. Nie jestem zaawansowanym uzytkownikiem sqla i nie
do konca rozumiem kodowanie Unicode, dlatego tez umiescilem tego posta.

Sobota
Post by Grzegorz Gruza
Czesc,
w jaki sposób skonwertować typ nvarchar(>2) na float?
Konkretnie chodzi o dane numeryczne z zalinkowanego servera OLAP pobierane
za
pomoca skladni MDX w OPENQUERY.Mimo ze pole w kostce jest typu Double to w
sqlu
otrzymuje nvarchar a potrzbuje jakiegos typu numerycznego.
[...]
Może CONVERT?
Pozdrawiam
--
Grzegorz Gruza
Odpowiadając usuń spamerom_nie z adresu
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Jacek Zaleski
2003-09-18 08:07:45 UTC
Permalink
Post by Sobota
convert(float(53),[Pole_nvarchar(>2)]) dziala dla Pole_nvarchar=234,4 ale dla
Pole_nvarchar=3040,3 juz nie.
float jest na 4 bajtach natomiast nvarchar moze miec wiekszy
rozmiar.Chociaz z
Post by Sobota
drugiej strony np. w C mozna konwertowac char[30] na float
(atof)-natomiast nie
Post by Sobota
wiem jak to wyglada w sqlu. Nie jestem zaawansowanym uzytkownikiem sqla i nie
do konca rozumiem kodowanie Unicode, dlatego tez umiescilem tego posta.
Wykonałem Twój przykład i nie zauważyłem, żeby coś źle działało.
Obie liczby skonwertowały się na typ float. Co masz na myśli pisząc, nie
działa?

Float zajmuje 4 bajty, ale liczba jest zapisywana w postaci wykładnika
i mantysy, a nie w postaci kolejnych cyfr, więc długość stringu nie
ma bezpośredniego wpływu.
Sobota
2003-09-18 08:42:43 UTC
Permalink
A moglbys napisac swoj przyklad. Ja sprobowalem czegos takiego i nie dziala:
declare @z nvarchar(4)
set @z = '10,4'
select @z, convert(float(53), @z)

Blad:Error converting data type nvarchar to float.

Sobota

P.S.
Konkretnie potrzebne jest mi to przy wyciagania danych z zalinkowanego servera
OLAP w MS Sql.Przykladowa skladnia przy uzyciu MDX (dla skladni SQL nie ma tego
problemu):
SELECT *, [[Measures]].[Wartość]]] AS Expr2, isnumeric([[Measures]].
[Wartość]]]) AS Expr1, (CAST([[Measures]].[Wartość]]] AS float))) AS Expr3
FROM OPENQUERY(LINKED_OLAP,'select
{[Measures].[Wartość]} on columns,
NonEmptyCrossJoin([Data].members, [JO].members, [Klient].members,
[Ls Towar].members, [Kod_trx].members) on rows
from sprzedaz_statystyki1')
Wartosc [[Measures]].[Wartość]]] jest numeryczna gdy jest mniejsza od 1000,00
(mowa o liczbach zminnoprzecinkowych), gdy wieksza od 1000,00 juz nie jest
numeryczna i nie daje sie skonwertwac na float.
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Jacek Zaleski
2003-09-18 08:51:27 UTC
Permalink
Post by Sobota
Blad:Error converting data type nvarchar to float.
Proponuję zamienić ',' na '.' w zmiennej @z
Jacek Zaleski
2003-09-18 08:59:07 UTC
Permalink
Post by Sobota
Konkretnie potrzebne jest mi to przy wyciagania danych z zalinkowanego servera
OLAP w MS Sql.Przykladowa skladnia przy uzyciu MDX (dla skladni SQL nie ma tego
SELECT *, [[Measures]].[Wartość]]] AS Expr2, isnumeric([[Measures]].
[Wartość]]]) AS Expr1, (CAST([[Measures]].[Wartość]]] AS float))) AS Expr3
FROM OPENQUERY(LINKED_OLAP,'select
{[Measures].[Wartość]} on columns,
NonEmptyCrossJoin([Data].members, [JO].members, [Klient].members,
[Ls Towar].members, [Kod_trx].members) on rows
from sprzedaz_statystyki1')
Wartosc [[Measures]].[Wartość]]] jest numeryczna gdy jest mniejsza od 1000,00
(mowa o liczbach zminnoprzecinkowych), gdy wieksza od 1000,00 juz nie jest
numeryczna i nie daje sie skonwertwac na float.
Musisz zamienić przecinek na kropkę w formacie liczby Measures.
Wpisz wszędzie Replace( Measures, ',', '.' )
Post by Sobota
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Sobota
2003-09-18 09:33:42 UTC
Permalink
Ufff zadzialalo! Najgorsze sa najprostsze bledy:(

Dziekuje za pomoc i rozwiazanie problemu:)

Sobota
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Loading...