Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| memo:sql [18/07/2019 10:05] – Augmentation de la taille des titres Arnaud Jacquemin | memo:sql [03/11/2025 17:35] (Version actuelle) – [MSSQL : trouver les verrous sur une table] Arnaud Jacquemin | ||
|---|---|---|---|
| Ligne 13: | Ligne 13: | ||
| - | ===== NVL ===== | + | ===== Gérer valeur NULL ===== |
| + | |||
| + | Utiliser la fonction standard COALESCE : | ||
| <code sql> | <code sql> | ||
| -- Téléphone fixe, ou mobile sinon | -- Téléphone fixe, ou mobile sinon | ||
| - | SELECT | + | SELECT |
| FROM clients | FROM clients | ||
| </ | </ | ||
| - | Doc : [[http:// | + | Doc : [[https:// |
| + | |||
| + | Chez Oracle il existe aussi une fonction non standard | ||
| ===== Switch Case ===== | ===== Switch Case ===== | ||
| Ligne 38: | Ligne 42: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| - | ===== Portion de chaîne | + | ===== Portion de chaîne ===== |
| + | **Oracle :** | ||
| + | |||
| <code sql> | <code sql> | ||
| SELECT | SELECT | ||
| Ligne 46: | Ligne 52: | ||
| FROM produits_coloris | FROM produits_coloris | ||
| </ | </ | ||
| - | |||
| Doc : [[http:// | Doc : [[http:// | ||
| + | |||
| + | **MS SQL Server :** | ||
| + | |||
| + | <code sql> | ||
| + | SELECT | ||
| + | -- Séparer heures et minutes | ||
| + | SUBSTRING (a.actvissalheurearr, | ||
| + | FROM ACTEVISITESALARIE a | ||
| + | </ | ||
| + | |||
| + | Doc : https:// | ||
| Pour le faire selon une expression régulière : [[http:// | Pour le faire selon une expression régulière : [[http:// | ||
| Ligne 83: | Ligne 99: | ||
| === Oracle === | === Oracle === | ||
| - | |||
| <code sql> | <code sql> | ||
| Ligne 104: | Ligne 119: | ||
| Doc : [[https:// | Doc : [[https:// | ||
| + | |||
| + | === MS SQL Server === | ||
| + | |||
| + | <code sql> | ||
| + | select CONVERT(varchar, | ||
| + | from latable | ||
| + | -- Donne par exemple : ' | ||
| + | </ | ||
| + | |||
| + | Doc : [[https:// | ||
| ==== Date -> numéro de semaine ==== | ==== Date -> numéro de semaine ==== | ||
| Ligne 126: | Ligne 151: | ||
| ==== Texte -> date ==== | ==== Texte -> date ==== | ||
| + | |||
| + | === Oracle === | ||
| Fonction TO_DATE | Fonction TO_DATE | ||
| Ligne 144: | Ligne 171: | ||
| </ | </ | ||
| + | Ou en précisant le format : | ||
| + | <code sql> | ||
| + | SELECT * FROM latable | ||
| + | WHERE date = CONVERT(date, | ||
| + | </ | ||
| Doc : https:// | Doc : https:// | ||
| + | |||
| + | |||
| + | === MySQL === | ||
| + | |||
| + | <code sql> | ||
| + | SELECT STR_TO_DATE(" | ||
| + | </ | ||
| + | |||
| + | Doc : [[https:// | ||
| Ligne 211: | Ligne 252: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| + | |||
| + | ===== Plus grande valeur entre plusieurs lignes ===== | ||
| + | |||
| + | Par exemple, ne garder d'une table que la ligne la plus récente pour chacun des utilisateurs... | ||
| + | |||
| + | <code sql> | ||
| + | WITH nom_alias AS ( | ||
| + | SELECT * | ||
| + | , ROW_NUMBER() OVER(PARTITION BY userid ORDER BY datecreation DESC) AS position | ||
| + | FROM table_a_filtrer | ||
| + | ) | ||
| + | SELECT | ||
| + | ... | ||
| + | FROM | ||
| + | nom_alias f | ||
| + | INNER JOIN | ||
| + | ... | ||
| + | WHERE | ||
| + | f.position = 1 -- uniquement dernier document | ||
| + | AND ... | ||
| + | ORDER BY ... | ||
| + | </ | ||
| + | |||
| + | |||
| ====== INSERT ====== | ====== INSERT ====== | ||
| Ligne 344: | Ligne 409: | ||
| Doc : [[http:// | Doc : [[http:// | ||
| + | Testé avec M$ SQL Server : | ||
| + | <code sql> | ||
| + | SELECT * | ||
| + | INTO destination | ||
| + | FROM source; | ||
| + | </ | ||
| + | |||
| + | Doc : https:// | ||
| ====== ALTER TABLE ====== | ====== ALTER TABLE ====== | ||
| Ligne 352: | Ligne 425: | ||
| nouveau2 | nouveau2 | ||
| | | ||
| + | </ | ||
| + | |||
| + | ====== MSSQL : lier un utilisateur à une connexion ====== | ||
| + | |||
| + | <code sql> | ||
| + | USE NomDelaBase | ||
| + | GO | ||
| + | |||
| + | ALTER USER Utilisateur WITH LOGIN = Connexion | ||
| + | GO | ||
| + | </ | ||
| + | |||
| + | ====== MSSQL : copier des tables d'un schéma à un autre ====== | ||
| + | |||
| + | > Use the Generate Scripts Wizard in SSMS for generating the script for constraints and indexes. | ||
| + | > | ||
| + | >Follow these steps: | ||
| + | > | ||
| + | >1. Open SSMS | ||
| + | >2. Expand databases and select the database-> | ||
| + | >3. click next and set " | ||
| + | >4. Select the tables for which the script is needed | ||
| + | >5. Click next -> | ||
| + | > | ||
| + | >This generates the script for table with indexes, constraints etc. | ||
| + | > | ||
| + | >More information: | ||
| + | |||
| + | Source : https:// | ||
| + | |||
| + | ====== MSSQL : trouver les verrous sur une table ====== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT | ||
| + | object_name(object_id) AS objet_bloque, | ||
| + | lock.resource_type, | ||
| + | db.name AS db_name, | ||
| + | lock.resource_associated_entity_id, | ||
| + | lock.request_mode, | ||
| + | lock.request_session_id, | ||
| + | task.blocking_session_id, | ||
| + | task.* | ||
| + | FROM sys.dm_tran_locks lock | ||
| + | INNER JOIN sys.partitions p ON p.hobt_id= lock.resource_associated_entity_id | ||
| + | INNER JOIN sys.databases db ON db.database_id = lock.resource_database_id | ||
| + | LEFT JOIN sys.dm_os_waiting_tasks as task | ||
| + | ON lock.lock_owner_address = task.resource_address | ||
| + | LEFT JOIN sys.dm_os_tasks AS STasks | ||
| + | ON STasks.task_address = task.waiting_task_address | ||
| + | WHERE resource_database_id = 20 AND object_name(object_id) = ' | ||
| </ | </ | ||