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ę.

  • Odpowiedzi

    • Trudne się wylosowało... Monitorów z tunerem jest jak na lekartwo a szybszych niz 60hz tym bardziej. Nie ma mowy też o oledzie ani miniledzie z tunerem chyba że chodzi o telewizor to już prędzej coś znajdziesz.  Nie podałeś specyfikacji swojego komputera to też niezbyt można powiedzieć czy poradzi sobie z monitorem 4k np. (Samsung monitor m7 i m8) mają smart tv ale tunera już nie mają... Dodatkowo są na matrycy VA co nie każdemu może przypaść do gustu. Najlepszym rozwiązaniem będzie kupno możliwie najlepszego monitora na miniledzie/oled (jeżeli nadal mówimy o budżecie 4000zł) i jakiegoś smartboxa (googletv) z tunerem i podłączenie go do monitora poprzez HDMI.
    • Witam Proszę o ocenę zestawu do grania w 1440p i ewentualne propozycje zmian, chciałabym żeby wszystko zamknęło się w 7tys. Preferuję połączenie Intel/Nvidia, najlepiej jak najmniej RGB, dyski już posiadam (2 SSD Sata). Procesor i5 14600KF Karta Gigabyte GeForce RTX 4070 Super Windforce OC 12GB Płyta główna MSI B760 Gaming Plus WIFI lub MSI MAG B760 Tomahawk WIFI (wcześniej rozważałam również Gigabyte B760 Gaming X AX) Zasilacz Seasonic Focus GX - 750W Lexar Ares RGB 32GB 6400MHz CL32 Obudowa Genesis Irid 505F Z chłodzeniem mam problem, ponieważ chciałam zakupić Deepcool'a AK620, jednak nie jest dostępny w sklepie komputronika (sklep wybrałam ze względu możliwości odbioru komputera w moim mieście). Niestety ten ma dość ograniczony wybór chłodzeń. Tak samo jak widać mocno zastanawiam się nad płytą główną, jestem otwarta na propozycje.
    • https://www.rtings.com/monitor/learn/research/vrr-flicker  
    • Ja czego nie rozumiem? No ja rozumiem jaka jest różnica pomiędzy odbiornikiem prądu a generatorem. Z tego co widzę hybrydy się zgłasza. Czy Ci się to podoba czy nie. To nie jest offgrid.  Tak samo jak magazyn energii. Mimo iż ludzie używają je wewnątrz domu, to muszą być zgłaszane.  To że chińczyk mówi, że falownik nie wysyła nadmiaru energii poza sieć nie ma żadnego znaczenia jeśli podepniesz to do sieci.  Czy na rondo nie ma liczników? Na enmasz umowy tam z energetyka? Nie da się zamontować normalnej instalacji? Co powiedział Ci dostawca prądu? Jeśli sąsiada z działki wywali choćby radio na drugi tydzień po montażu Twojego lewego PV, to spodziewaj się problemów.  Jak udowodnił aż że Twój chiński szajs jest przekozak wówczas? Będziesz miał na to jakieś papiery?  Ze specyfiki pracy jaką oczekujesz. Ta sama zasada działania Cię interesuje. Będziesz szukał paneli gruntowych? A czym różnią się takie od paneli dachowych albo balkonowych? Zestaw balkonowy to jest to co szukać powinieneś. Bo zestawów RODo nie robi a raczej?  Zacznijmy od tego, że zacząłeś od złej strony, bo zamiast falownika i budowania hybrydy, podpina się takie rzeczy prosto w panele. Pompa na prąd stały o szerokim napięciu działania pyrka sobie jak ma napięcie i tyle. 
    • 40 powinno na górkę styknąć. I to na luzie jako dodatkowe.  Ewentualnie powinieneś pomyśleć nad jakimiś listwami przypodlogowymi z systemem dowolnego dodawania gniazdek.
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...