Avatar billede sbjerre Nybegynder
11. oktober 2004 - 13:18 Der er 7 kommentarer og
1 løsning

Brug af LENGHT i SQL query

Hej

Jeg arbejder med at system der benytter CPR numre.

I en export fra et andet system er nogle cpr numre blevet forkortet i det at foranstillede 0'er (nuller) er fjernede så en del CPR numre kun indeholder 9 cifre.

Hvor kan jeg lave følgende query

SELECT * FROM employees WHERE lenght(cpr) < 10

eller lidt mere udbygget

UPDATE employees SET cpr = '0' + cpr WHERE employee_id = (SELECT employee_id FROM employees WHERE lenght(cpr) < 10


Skriv endelig hvis det ikke giver mening...

Mvh sbjerre
Avatar billede jensgram Nybegynder
11. oktober 2004 - 13:24 #1
Kan du ikke bare

UPDATE employees SET cpr = '0' + cpr WHERE LENGTH(cpr) < 10

?
Avatar billede askhoej Praktikant
11. oktober 2004 - 13:25 #2
funktionen hedder LEN()
Avatar billede jensgram Nybegynder
11. oktober 2004 - 13:26 #3
Hmmm ;)
Avatar billede sbjerre Nybegynder
11. oktober 2004 - 13:48 #4
Så kommer query til at se sådan ud:

UPDATE    employees
SET              employee_cpr = '0' + employee_cpr
WHERE    (employee_id =
                          (SELECT    employee_id
                            FROM          employees
                            WHERE      (LEN(employee_cpr) < 10)))

hvilket resulterer i følgende fejl:

[Microsoft][ODBC SQL Server Driver][SQL Server]Subquery returned more then 1 value. This i not permitted when the subquery follows =, !=, <, <=, >, >= or when the subquery is used as an expression.

Hvad gør jeg så...?

mvh sbjerre
Avatar billede sbjerre Nybegynder
11. oktober 2004 - 13:49 #5
select sætningen for sig selv virker fint nok:

SELECT employee_id FROM employees WHERE (LEN(employee_cpr) < 10)
Avatar billede jensgram Nybegynder
11. oktober 2004 - 14:45 #6
Hvorfor laver du så sub-select?

Dette skulle kunne klare tricket:


UPDATE employees SET cpr = '0' + cpr WHERE LEN(cpr) < 10
Avatar billede ldanielsen Nybegynder
14. oktober 2004 - 17:09 #7
jensgram har da vist ret, blot har han ikke kaldt tingene det rigtige:
UPDATE employees SET employee_cpr = '0' + employee_cpr WHERE LEN(employee_cpr) < 10

- men dette ville reparere din sætning (IN i stedet for =):

UPDATE employees
SET employee_cpr = '0' + employee_cpr
WHERE employee_id IN
  (SELECT employee_id FROM employees
  WHERE LEN(employee_cpr) < 10)
Avatar billede jensgram Nybegynder
15. oktober 2004 - 08:26 #8
ldanielsen > Ja, den var smuttet. Godt set, mester ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester