Porównanie wielkości jeśli zmienia jest int

Porównanie wielkości jeśli zmienia jest int
Paweł Ada
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 52
0

Witam mam następujące problem ma takie przykładowe dane :

Z104.001.175.018
Z104.001.175.023
Z104.001.175.023_Z
Z104.141.190.023
Z104.198.190.023
Z104.201.140.060
ZW143 SP X HP.060P
ZW143 SP X HP.065
ZW143 SP X HP.065P
ZW143 SP X HP.060P

Następnie chce wszystkie rekordy które ostania liczba jest większa niż np 24
np kod Z104.001.175.023 wycinamy 023 i patrzymy czy jest liczbą i czy jest większy niż 23

Moje próby pytań wyglądały mnie więcej tak

Kopiuj
Select  name FROM table WHERE SUBSTRING(name 13,3)>24 

Tylko nie zawsze ta wycięta wartość bd liczba i wyskakuje błąd
Próbowałem z ISNUMERIC ale to chyba ślepa uliczka .

BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
1

Sprawdź tak:

Kopiuj
SELECT NAME
FROM   table
WHERE  CASE
         WHEN Isnumeric(kolumna) = 1 THEN Cast(kolumna AS INT)
         ELSE NULL
       END > 24  

Edit: bo źle mi się sformatował kod :D

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3902
1

Która wersja ms sqla?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3902
1

MAsz takie wartości:

  1. Z104.001.175.023_Z
  2. Z104.001.175.023
  3. ZW143 SP X HP.060P

I teraz 1,3 odrzucasz bo nie ma liczby na ostatnich znakach czy szukasz bierzesz pod uwagę odcinając końcówki '_z' i P ?

BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
1

To jeszcze raz sprawdź to , miałeś błąd w substring (powinno byc 14,3) ... a ja w ogóle to pominąłem :P

Kopiuj
SELECT NAME
FROM   table
WHERE  CASE
         WHEN Isnumeric(Substring(NAME, 14, 3)) = 1 THEN Cast(
         Substring(NAME, 14, 3) AS INT)
         ELSE NULL
       END > 24  
PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3902
1

Skoro liczba ma być od 14 do 17, to substring powinien mieć taki zapis: SUBSTRING(name 14,4), bo patrzymy na znaki 14,15,16,17, a to są 4 znaki

DB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 36
BlackBad
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 454
1

Sprawdź sobie ten kod:

Kopiuj
SELECT SUBSTRING('ZW143 SP X HP.060P',14,3)

I juz wiadomo o co chodzi ... masz różne długości znaków ... musisz podejść do tematu wycięcie fragmentu textu od ostetniej kropki...

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3902
1

@BlackBad: sprawdzenie IsNumeric nie determinuje tego że od razu można to przekonwertować na liczbę, w załączonym przykładzie:

Wartość substringa z ZW143 SP X HP.060P = ".06", is numeric = 1 => bład konwersji do int

@Paweł Ada ja bym warunek zbudował tak:

Kopiuj
  case when substring(col,14,3) like '[0-9][0-9][0-9]' then
    substring(col,14,3)
  else 
      null end > 24

http://sqlfiddle.com/#!18/c18f4/23

Paweł Ada
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 52
0

Działa :) dziękuje @Panczo i @BlackBad za pomoc

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.