Decimal separator TSQL
14 отговора
0 прегледа
Decimal separator TSQL
Здравейте някой да знае как да разбера "Decimal separator" в TSQL ( MsSql ), зависи от Regional Settings на компа но аз бих искал да го видия с "select "
Благодаря предварително!
Благодаря предварително!
Re: Decimal separator TSQL
select-a se izpylniava na servera, a ti veroiatno pitash za nastroiki na klientskata mashina.
ami niama na4in... survera vryshta danni, i ne se interesuva kak shte gi prezentira klienta.
ami niama na4in... survera vryshta danni, i ne se interesuva kak shte gi prezentira klienta.
Re: Decimal separator TSQL
На сървъра на който е инсталиран MSSQL или на клиентската машина от която се изпълнява заявката?
Ако е на сървъра на кой потребител регионалните настройки?
cheers,
</wqw>
[линк]
Ако е на сървъра на кой потребител регионалните настройки?
cheers,
</wqw>
[линк]
Re: Decimal separator TSQL
Въпреки че не знам за какво би ти свършило работа, да получиш тази информация точно със SQL, опитай с нещо такова:
SELECT SUBSTRING(STR(1/2), 2, 1) AS DecPoint
В Интернете много психов,
Каждый пятый - это псих.
Говори со мною тихо,
Может я один из них.
SELECT SUBSTRING(STR(1/2), 2, 1) AS DecPoint
В Интернете много психов,
Каждый пятый - это псих.
Говори со мною тихо,
Может я один из них.
Re: Decimal separator TSQL
Едно (not tested) щеше да е достатъчно да разберем, че не е сигурно дали работи под MSSQL. Това което си искал да кажеш вероятно е това:
Забележи 1.0/2 щото иначе е целочислено. Забележи CAST от ANSI SQL. И последна забележка, не работи понеже не се съобразява с никакви регионални настройки -- нито на default профила, нито на потребителя, чийто security context ползва service-а.
cheers,
</wqw>
[линк]
SELECT SUBSTRING(CAST(1.0/2 AS VARCHAR), 2, 1) AS DecPoint
Забележи 1.0/2 щото иначе е целочислено. Забележи CAST от ANSI SQL. И последна забележка, не работи понеже не се съобразява с никакви регионални настройки -- нито на default профила, нито на потребителя, чийто security context ползва service-а.
cheers,
</wqw>
[линк]
Re: Decimal separator TSQL
Значи в момента нямам подръка MSSQL за да го изтествам, но както си се сетил да ползваш CAST за да обърнеш към char тип, така може да го използваш за да укажеш, че 1 е всъщност константа от тип float
"нещо такова" не ти ли говори, че е not-tested? Или изрично трябва да укажа?
Не ти ли стига да се заяждаш в bgdev, btw.?! Знам че си перфекционист, ама...
...нито ти, нито аз знаем, за какво точно му трябва да разбере какъв е decimal point символа с SQL. А също и дали го интересува този който е на сървъра, или му трябва за да може да подава числови константи в SQL стрингове, които образува динамично в приложението си.
В Интернете много психов,
Каждый пятый - это псих.
Говори со мною тихо,
Может я один из них.
"нещо такова" не ти ли говори, че е not-tested? Или изрично трябва да укажа?
Не ти ли стига да се заяждаш в bgdev, btw.?! Знам че си перфекционист, ама...
...нито ти, нито аз знаем, за какво точно му трябва да разбере какъв е decimal point символа с SQL. А също и дали го интересува този който е на сървъра, или му трябва за да може да подава числови константи в SQL стрингове, които образува динамично в приложението си.
В Интернете много психов,
Каждый пятый - это псих.
Говори со мною тихо,
Может я один из них.
Редактирано от TPECKATA на
Re: Decimal separator TSQL
Не бе, не се заяждам. Малко на ego-trip съм го обърнал и съм извадил ятагана в името на правдата :-))
Btw, нищо лично (тука без да искам написах "нещо":-)) -- не те познавам.
cheers,
</wqw>
[линк]
Btw, нищо лично (тука без да искам написах "нещо":-)) -- не те познавам.
cheers,
</wqw>
[линк]
Re: Decimal separator TSQL
Здравейте първо искам да благодаря за отговорите !
Интересуваше на самия Сървър Decimal Point'a.
Идеята е следната правя
" insert ....
Select *
From OPENROWSET( Excel File ) .... "
в този Excel файл има колони които са decimal с раздалител ',' или '.' в зависимост от настройките на клиента. След това пускам function за тест дали има CharIndex( DecPoint ) > 0 ако да си ги вкарвам ако не Replace и готово.
Интересуваше на самия Сървър Decimal Point'a.
Идеята е следната правя
" insert ....
Select *
From OPENROWSET( Excel File ) .... "
в този Excel файл има колони които са decimal с раздалител ',' или '.' в зависимост от настройките на клиента. След това пускам function за тест дали има CharIndex( DecPoint ) > 0 ако да си ги вкарвам ако не Replace и готово.
Re: Decimal separator TSQL
Само да допълня :
CAST(1.0/2 AS VARCHAR ) работи само ако вече знаеш предварителния резултат.
за да е точно :
SELECT SUBSTRING(CAST(1/2 AS VARCHAR), 2, 1) AS DecPoint = '0'
Ето това е правилното и работи в TSQL :
Select Substring( Cast(Cast(1 as float)/2 as varchar), 2, 1 ) As DecPoint = '.'
Но нямаше да стигна до този извод без да ми дадете напътване
Много много 10х
CAST(1.0/2 AS VARCHAR ) работи само ако вече знаеш предварителния резултат.
за да е точно :
SELECT SUBSTRING(CAST(1/2 AS VARCHAR), 2, 1) AS DecPoint = '0'
Ето това е правилното и работи в TSQL :
Select Substring( Cast(Cast(1 as float)/2 as varchar), 2, 1 ) As DecPoint = '.'
Но нямаше да стигна до този извод без да ми дадете напътване
Много много 10х
Re: Decimal separator TSQL
OPENROWSET като VARCHAR ли ти ги връща? Щото ако не пипаш IMEX се опитва да отгатне какъв е типа на колоната (по първите 10-15 стойности) и вероятно идва като FLOAT. Нали ползваш OLEDB provider-а на JET за тези XLS файлове?
Ако все пак е VARCHAR не е нужно да проверяваш каквото и да било преди да направиш брутално REPLACE(REPLACE(t.MyColumn, ',', @DecPoint), '.', @DecPoint) или подобно :-))
cheers,
</wqw>
[линк]
Ако все пак е VARCHAR не е нужно да проверяваш каквото и да било преди да направиш брутално REPLACE(REPLACE(t.MyColumn, ',', @DecPoint), '.', @DecPoint) или подобно :-))
cheers,
</wqw>
[линк]
Re: Decimal separator TSQL
Изпозвам "Microsoft.Jet.OLEDB.4.0" и ми връща като Real :
Select *
From OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=FilePath+FileName','Select * From [SheetName$]')

Select *
From OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=FilePath+FileName','Select * From [SheetName$]')
Re: Decimal separator TSQL
Е какъв REPLACE правиш на тия REAL колони бре?!
Карай... Пробвай с 'Excel 8.0;IMEX=1;Database=FilePath+FileName' за да нямаш проблеми ако някой изплеска едно 'zzzzz' на последния ред на "числова" колона. Всички колони щи идват VARCHAR.
cheers,
</wqw>
[линк]
Карай... Пробвай с 'Excel 8.0;IMEX=1;Database=FilePath+FileName' за да нямаш проблеми ако някой изплеска едно 'zzzzz' на последния ред на "числова" колона. Всички колони щи идват VARCHAR.
cheers,
</wqw>
[линк]
Re: Decimal separator TSQL
Имам фукция която чете Cast( Real_Value as Varchar ) И от там почвам проверките останалото го писах :)
Re: Decimal separator TSQL
Хм...
Хайде сега да пробвате това нещо от различни клиентски машини, с различни регионални настройки... Ще останете доста учудени от резултата...
И без да се зачждам, а само да отбележа, че MS са оставили CAST само заради съвместимост м/у версиите. Препоръчват да се ползва CONVERT!
В краина сметка, десетичния разделител на коя машина?!
Хайде сега да пробвате това нещо от различни клиентски машини, с различни регионални настройки... Ще останете доста учудени от резултата...
И без да се зачждам, а само да отбележа, че MS са оставили CAST само заради съвместимост м/у версиите. Препоръчват да се ползва CONVERT!
В краина сметка, десетичния разделител на коя машина?!
Re: Decimal separator TSQL
В отговор на:Ще останете доста учудени от резултата...
Въобще не се учудих -- навсякъде е еднакъв.
В отговор на:Препоръчват да се ползва CONVERT!
Любопитно ми е кой и къде го препоръчва? Дай връзки! Щото аз препоръчвам CAST (ама ползвам CONVERT:-)).
Освен с третия си параметър (style), който е полезен за конвертиране VARCHAR <-> DATETIME стойности, файда друга няма. Не вярвам ей така за кеф да махнат ANSI SQL'92 съвместимост, щото CAST е от стандарта, а CONVERT е vendor specific.
В отговор на:В краина сметка, десетичния разделител на коя машина?!
На съвъра!
cheers,
</wqw>
[линк]