Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Gość Wedge96PL

VARCHAR I DECIMAL a przecinki

Rekomendowane odpowiedzi

Gość Wedge96PL

Cześć, używam kodu na wysyłkę mail w tym informującą o kwocie pobrania. Działa jeśli kwota jest bez przecinka, nie działa jeśli pojawia się przecinek wywalając komunikat:

"Conversion failed when converting the varchar value '5129.53' to data type int."

 

5129.53 to kwota pobrania. W polu edytowalnym podczas tworzenia etykiety kwota pojawia się dzieląc się przecinkiem.

 

Tutaj kod:

 

ALTER PROCEDURE [YShipping].[WysylkaEmailParametry]
   @wysylkaId INT
AS
BEGIN
   SELECT

   SUBSTRING(
   (
       SELECT
       ', '+NumerPrzewozowy
       FROM YShipping.WysylkaPaczki Wp
       WHERE WP.WysylkaId=@wysylkaId
       FOR XML PATH ('')
   ), 3, 1000) [nrprzesylki]
   ,Szczegoly.value('(WysylkaRequest/Zawartosc)[1]','varchar(400)') [nrdokumentu]
   ,Spedytor [spedytor]
   ,CASE WHEN Szczegoly.value('(WysylkaRequest/KwotaPobrania)[1]','varchar(400)') IS NOT NULL AND Szczegoly.value('(WysylkaRequest/KwotaPobrania)[1]','varchar(400)') <>0
   THEN 'Kwota pobrania: ' + CAST(CAST(Szczegoly.value('(WysylkaRequest/KwotaPobrania)[1]','varchar(400)') AS DECIMAL(14, 2)) AS varchar)
   ELSE ''
   END [KwotaPobrania]
   ,CASE WHEN Spedytor LIKE 'GLS' THEN SUBSTRING(
   (
       SELECT
      ', '+'https://gls-group.eu/PL/pl/sledzenie-paczek?match=5'+NumerPrzewozowy
       FROM YShipping.WysylkaPaczki Wp
       WHERE WP.WysylkaId=@wysylkaId
       FOR XML PATH ('')
   ), 3, 1000)
   WHEN Spedytor LIKE 'PocztaPolska' THEN     SUBSTRING(
   (
       SELECT
       ', '+'https://emonitoring.poczta-polska.pl/?numer='+NumerPrzewozowy
       FROM YShipping.WysylkaPaczki Wp
       WHERE WP.WysylkaId=@wysylkaId
       FOR XML PATH ('')
   ), 3, 1000)
   END [link]

   FROM YShipping.Wysylka W
   WHERE W.Id=@wysylkaId
END

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Na pewno w tej procedurze się wykłada? Raczej tam, gdzie używasz [KwotaPobrania]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Wedge96PL

Na pewno w tej procedurze się wykłada? Raczej tam, gdzie używasz [KwotaPobrania]

 

Tak, nie mam w ogóle dostępu do procedury [KwotaPobrania]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Wedge96PL

a nie chodzi po prostu o locale? przecinek a kropka to inna notacja liczb...

 

Jeśli dobrze zrozumiałem to chodzi Ci o zamianę przecinków na kropki? W takim wypadku wywala kolejny błąd: " Incorrect syntax near 'varchar(400)'.

"

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

konkretnie jak to napisałeś?

coś w stylu

 

REPLACE(Szczegoly.value('(WysylkaRequest/KwotaPobrania)[1]','varchar(400)'), ',', '.')

 

nie mówie, że to ma być dokładnie tak bo piszę z głowy :E

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Wedge96PL

konkretnie jak to napisałeś?

coś w stylu

 

REPLACE(Szczegoly.value('(WysylkaRequest/KwotaPobrania)[1]','varchar(400)'), ',', '.')

 

nie mówie, że to ma być dokładnie tak bo piszę z głowy :E

 

Nie, po prostu pozmieniałem przecinki na kropki, nie bardzo ogarniam SQL :/ Mógłbyś mi napisać ten kod tak jak powinien wyglądać aby uniknąć ten błąd?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W tym zapytaniu są 2 problemy. Błąd który dostajesz leci z tego kawałka:

Szczegoly.value('(WysylkaRequest/KwotaPobrania)[1]','varchar(400)') <>0

Tu jest porównywany typ tekstowy z numerycznym (0 jest intem). W takim przypadku zachodzi niejawna konwersja tekstu na liczbę i się wywala na przecinku. Jeżeli wiesz, że będzie tam 0 i zawsze 0, a nie np. 0.00 albo pusta wartość to możesz zrobić <> '0' i załatwi to problem.

 

Druga sprawa to przecinek przy zamienianiu tekstu na Decimal. W SQL jak właściwie prawie wszystkich językach komputerowych standardem jest kropka, więc musisz wewnątrz casta zrobić jeszcze replace , na .

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Wedge96PL

W tym zapytaniu są 2 problemy. Błąd który dostajesz leci z tego kawałka:

Szczegoly.value('(WysylkaRequest/KwotaPobrania)[1]','varchar(400)') <>0

Tu jest porównywany typ tekstowy z numerycznym (0 jest intem). W takim przypadku zachodzi niejawna konwersja tekstu na liczbę i się wywala na przecinku. Jeżeli wiesz, że będzie tam 0 i zawsze 0, a nie np. 0.00 albo pusta wartość to możesz zrobić <> '0' i załatwi to problem.

 

Druga sprawa to przecinek przy zamienianiu tekstu na Decimal. W SQL jak właściwie prawie wszystkich językach komputerowych standardem jest kropka, więc musisz wewnątrz casta zrobić jeszcze replace , na .

 

Ok, mógłbym poprosić Cię o zmianę w kodzie i wklejenie go tutaj? Coś robię nadal źle.

 

EDIT: Ok udało się, jednak wszystko hula bez Decimala i tak.

Dzięki za pomoc :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

  • Tematy

  • Odpowiedzi

    • Jest promka na lords of the fallen, pytanie mam, ile zajmuje przejscie tej gry, moze nie na 100 procent, no ale raczej tak zaglądając wszędzie i nie będąc zbyt dobrym w soulslikei
    • Odnoszę się do testu AORUS'a https://tftcentral.co.uk/reviews/gigabyte-aorus-fo32u2p Będzie dostępne dla wszystkich do przeczytania za kilka dni ponieważ na obecną chwilę recenzje mogą przeczytać patronaci z early access. I sam się może w końcu przekonasz.   Oni ze sprzętem potwierdzają to co powtarzam już kilka razy - dałem ci nawet kilka wykresów oraz cytat odnośnie HDR z tej recenzji, @MSky7 potwierdza nawet z jego "lux sprzętem" gdy sam zaczął badać temat ale nie wiem czemu cały czas idziesz w zaparte i chowasz głowę w piasek.
    • Mogą być wydane na rozwój firm, które na tym eksporcie zarabiają, tym samym na tworzenie nowych stanowisk pracy. Opłaca się importować technologię, bo to też rozwój. Import towarów i siedzenie we własnym grajdołku z daną pulą pieniędzy, którą poszerza się wyłącznie przez dodruk prowadzi do wewnętrznej dyktatury ekonomicznej i do zubożenia społeczeństwa. W sumie coraz częściej potwierdza się to co pisałem, że moim zdaniem ekonomiczne poglądy oparte na poglądach Konfederacji to kapitalizm w najgorszej formie skupiający się tylko na dwóch klasach: bogatych i biednych, gdzie biedni będą ekonomicznymi niewolnikami bogatych.  
    • Teoretycznie pozwala Ci to na przenoszenie windowsa na kolejny komputer. Ogólnie przy reinstalacji systemu powinno złapać klucz z płyty głównej, ale dodałbym jego numery przy sprzedaży. Windows 11 na dysk HDD to musi być męczarnia  
    • Jak nie masz spadków poniżej 200 to nie ma tematu ale 75hz w csie to jest dramat + ta gra działa zle na wszelkiej synchronizacji i po prostu bez gra się najlepiej przynajmniej tak było w cs go  
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...