SQL заменить точку запятой

У меня есть следующий код:

SELECT cast(Listenpreis*1.19 as decimal(29,2)) as Listenpreis
 FROM [SL_M03KNE].[dbo].[ARKALK]

Я получаю это значение: 5.59

Я пытаюсь заменить точку на komma, поэтому я получаю значение: 5,59

Я пробую код:

SELECT replace((cast(Listenpreis*1.19 as decimal(29,2)) as Listenpreis),'.','))
 FROM [SL_M03KNE].[dbo].[ARKALK]

Но что-то не так с Синтаксисом. Любые идеи?

Я узнал: если я делаю

select Artikelnummer,Listenpreis*1.19 as money from [SL_M03KNE].[dbo].[ARKALK]

я получаю: 5,59

Если я делаю

EXEC master..xp_cmdshell 'bcp "select Artikelnummer,Listenpreis*1.19 as money from [SL_M03KNE].[dbo].[ARKALK]" queryout "D:\shop\xml\Artikelpreise_ohne.csv" -E -c -T -x

bcp делает преобразование из коммы в точку. Как я могу это исправить?

Ответ 1

Ваше сглаживание as Listenpreis не в том месте. Это должно быть последнее. Также часть '.','.

SELECT REPLACE(CAST(Listenpreis*1.19 AS DECIMAL(29,2)) ,'.',',')  AS Listenpreis
 FROM [SL_M03KNE].[dbo].[ARKALK]

SQLFiddle DEMO

Ответ 2

Вам не хватает запятой и апострофа (у вас есть '.',' и вам нужно '.',','), попробуйте:

SELECT 
    REPLACE(CAST(Listenpreis*1.19 as decimal(29,2)), '.', ',')  as Listenpreis
FROM [SL_M03KNE].[dbo].[ARKALK]

Ответ 3

Это должно работать:

select replace(cast(Listenpreis*1.19 as decimal(29,2)),'.',',') as Listenpreis
 from [SL_M03KNE].[dbo].[ARKALK]

Похоже, вы компенсируете культурные настройки, посмотрите на инструкцию COLLATE.

Ответ 4

Я тоже боролся с этой проблемой и со мной, fuction, который работает:

CAST (replace_this_with_number_or_column_you_want_to_convert) AS float)

Это тоже полезно для вас?

Ответ 5

Не могли бы вы попробовать?

EXEC master..xp_cmdshell 'bcp "select Artikelnummer, REPLACE(CAST( Listenpreis*1.19 AS VARCHAR),''.'','','') as money from [SL_M03KNE].[dbo].[ARKALK]" queryout "D:\shop\xml\Artikelpreise_ohne.csv" -E -c -T -x'