---
title: "Varför inte NULL?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/58866-varför-inte-null"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "ulsy"
published: "2002-11-12T21:44:05.000Z"
updated: "2002-11-13T16:00:49.000Z"
replies: 13
views: 315
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/58866-varför-inte-null"
---

# Varför inte NULL?

## #1 — ulsy, 2002-11-12T21:44Z

Jag skickar ett formulär där ett fält har som standard NULL.
Även om jag inte skriver något i fältet blir det inte NULL.
Däremot om jag tar bort textfältet från formuläret så blir det NULL.

Hur kommer detta sig?

Permalänk: https://www.webforum.nu/p/58866

## #2 — LarsG, 2002-11-12T21:56Z

Om du inte fyller i ett fält så blir det en tom sträng. Om du utelämnar fältet så kommer det inte med alls i din insert och då blir det default-värdet som lagras (default-värdet är null default.)

Om du vill ha null om man inte fyller i ett fält så får du koda det själv

```php
$query = "insert into t (c1,c2) values ("
if ( $_POST["c1") == "" ) {
   $query .= "null"
} else {
   $query .= "'" . $_POST["c1") . "'"
}
$query .= ","
if ( $_POST["c2") == "" ) {
   $query .= "null"
} else {
   $query .= "'" . $_POST["c2") . "'"
}
$query .= ")"
```

Permalänk: https://www.webforum.nu/p/853515

## #3 — ulsy, 2002-11-12T22:11Z

Låter ju sunt.
Hur är det om det är asp?

Permalänk: https://www.webforum.nu/p/853527

## #4 — Erik Juhlin, 2002-11-12T22:20Z

Enklast är att använda ADO för då skiljer man inte på strängar och tal och kan använda en sån här funktion:

```
Function NullWhenEmpty(ByVal sValue)
	If Len(Trim(sValue & "")) = 0 Then
		NullWhenEmpty = Null
	Else
		NullWhenEmpty = sValue
	End If
End Function
```

Om man använder INSERT/UPDATE så får man väl skriva nåt sånt här:

```
Function NullWhenEmpty(ByVal sValue, ByVal sDataType)
	If Len(Trim(sValue  & "")) = 0 Then
		NullWhenEmpty = "NULL"
	ElseIf sDataType = "string" Then
		NullWhenEmpty = "'" & sValue & "'"
	ElseIf sDataType = "number" Then
		NullWhenEmpty = sValue	
	End If
End Function
```

Sen kanske det finns andra datatyper där man skriver annorlunda (#?), men du fattar nog poängen. :)

Permalänk: https://www.webforum.nu/p/853534

## #5 — Erik Juhlin, 2002-11-12T22:23Z

Exempel på hur man sen använder det.
Vid ADO:

```
rs("strängfält") = NullWhenEmpty(strängvariabel)
rs("nummerfält") = NullWhenEmpty(nummervariabel)
```

Vid INSERT/UPDATE:

```
"INSERT INTO tabell(strängfält, nummerfält) VALUES(" & NullWhenEmpty(strängvariabel, "string") & ", " & NullWhenEmpty(nummervariabel, "number") & ")"
```

Permalänk: https://www.webforum.nu/p/853535

## #6 — ulsy, 2002-11-12T22:28Z

Tack Erik, jag får testa och se.

Allt grunda sig i följande kod som LarsG hjälpte mig med:

```
select * from t
where current_date between coalesce(startdatum,current_date) 
and coalesce(slutdatum,current_date)
or (startdatum is null and slutdatum is null)
```

Kan man skriva om den så det inte är null utan ? vad det nu är som den lägger till själv?

Permalänk: https://www.webforum.nu/p/853539

## #7 — Erik Juhlin, 2002-11-13T08:29Z

Så här hade jag skrivit (om jag nu inte kört med NULL, vilket jag hade gjort):

```
SELECT * FROM t
WHERE CURRENT_DATE BETWEEN (CASE WHEN startdatum = '' THEN CURRENT_DATE ELSE startdatum END)
AND (CASE WHEN slutdatum = '' THEN CURRENT_DATE ELSE slutdatum END)
```

Sista raden är onödig eftersom att man redan hanterar när datum är null. Däremot vet jag inte hur bra CASE funkar i MySQL.

Permalänk: https://www.webforum.nu/p/853680

## #8 — ulsy, 2002-11-13T09:20Z

Detta ger bara en post i retur även att det finns flera som borde visas.
Hur kommer det sig?

Permalänk: https://www.webforum.nu/p/853693

## #9 — ulsy, 2002-11-13T09:43Z

Nu fungerar det precis som jag vill :) 

```
SELECT * FROM t
WHERE current_date between coalesce(startdatum,current_date)
and coalesce(slutdatum,current_date) 
or (startdatum = '' and slutdatum = '')
```

Tack för hjälpen!!! :e

Permalänk: https://www.webforum.nu/p/853699

## #10 — Erik Juhlin, 2002-11-13T10:05Z

Okej, men nu klarar du inte av om bara ett av datumen inte är ifyllda.

Permalänk: https://www.webforum.nu/p/853704

## #11 — LarsG, 2002-11-13T10:47Z

Coalesce är bara relevant om det ligger null i kolumnerna

```
SELECT * FROM t
WHERE current_date between 
case when startdatum = '' then current_date else startdatum end 
and case when slutdatum = '' then current_date else slutdatum end
```

Permalänk: https://www.webforum.nu/p/853719

## #12 — Erik Juhlin, 2002-11-13T10:55Z

Var det inte precis så jag skrev?
Enda skillnaden är väl paranteser och lite annorlunda formatering. :)

Permalänk: https://www.webforum.nu/p/853728

## #13 — LarsG, 2002-11-13T11:41Z

Doh, såg inte ditt inlägg asså.

Permalänk: https://www.webforum.nu/p/853755

## #14 — ulsy, 2002-11-13T16:00Z

Fungerar perfekt!

Tack för hjälpen!
 :)

Permalänk: https://www.webforum.nu/p/853984

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/58866-varför-inte-null
