2016-05-20 6 views
1

Ich habe ein bisschen Spalte wie folgt aus:Wie setze ich 1 für alle Bits, ohne die Länge der Spalte zu kennen?

// mytable 
+---------+------------+ 
| id | numb | 
+---------+------------+ 
| int(11) | bit(10) | 
+---------+------------+ 
| 1  | NULL  | 
| 2  | NULL  | 
+---------+------------+ 

nicht, dass dies erwartete Ergebnis:

// mytable 
+---------+------------+ 
| id | numb | 
+---------+------------+ 
| int(11) | bit(10) | 
+---------+------------+ 
| 1  | 1111111111 | 
| 2  | 1111111111 | 
+---------+------------+ 

Wissen Sie, ich, dass wie dies tun können:

UPDATE mytable SET numb = b'1111111111'; 

Aber vielleicht werde ich die Länge der numb Spalte in Zukunft ändern und dann Abfrage oben fehlschlägt. Wie kann ich 1 für alle Bits festlegen, ohne die Länge der Bitspalte zu kennen?


EDIT: Eigentlich versuche ich, so etwas zu tun:

UPDATE mytable SET numb = b'0'; 
/* output 
+---------+------------+ 
| id | numb | 
+---------+------------+ 
| int(11) | bit(10) | 
+---------+------------+ 
| 1  | 0000000000 | 
| 2  | 0000000000 | 
+---------+------------+ 
*/ 

Wie Sie sehen, ich 0 für alle Bits gesetzt, ohne die Länge der Säule zu kennen. Nun, wie kann ich das tun, nur 1 anstelle von 0 setzen?

+1

könnten Sie die sys-Tabellen für die Datentypen abzufragen, und dann verwenden, um die Länge für Ihren Einsatz – PyNoob

+0

'Select character_maximum_length FROM INFORMATION_SCHEMA.COLUMNS wo table_name =‚MYTABLE‘und schema =‚MYSCHEMA‘und COLUMN_NAME zu identifizieren = 'betäuben' verwenden [lpad] (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_lpad) mit diesem Pad 1 für jeden Wert in der Länge. – xQbert

+3

Können Sie den Wert auf -1 setzen, das ist alles 1s in 'Zweierkomplement' – Stavr00

Antwort

4

Basierend auf was @ Stavr00 sagte in den Kommentaren, kann ich den Wert auf -1 setzen. Etwas wie folgt aus:

UPDATE mytable SET numb = -1; 

/* output 
+---------+------------+ 
| id | numb | 
+---------+------------+ 
| int(11) | bit(10) | 
+---------+------------+ 
| 1  | 1111111111 | 
| 2  | 1111111111 | 
+---------+------------+ 
*/ 
+0

Viel einfacher als meine Mühe :) – Matt

+0

@Matt Ja ... aber Ihre Abfrage wäre auch korrekt. Upvote für Ihre Antwort – stack

1

Verwenden Sie die REPEAT Funktion und die CHARACTER_MAXIMUM_LENGTH für die Variable verwenden.

SELECT id, REPEAT('1', (SELECT CHARACTER_MAXIMUM_LENGTH 
         FROM information_schema.columns 
         WHERE table_schema = DATABASE() 
         AND table_name = 'mytable' 
         AND COLUMN_NAME = 'numb')) AS numb 
FROM mytable 
Verwandte Themen