Disons que j'ai la requête simple suivante qui retourne nom = "mars". Est-il possible de convertir ce résultat? Au lieu de "Mars" je veux un nom = "3". SQL est-il capable de faire de telles choses? J'utilise une base de données MSSQL. P> [update] corrigea la requête. En écrivant cet exemple simple, je l'ai mélangé avec MySQL [/ Mise à jour] em> p> p>
7 Réponses :
Si vous voulez juste un numéro de mois, vous pouvez le faire:
SELECT CASE WHEN name = 'January' then 1 WHEN name = 'February' then 2 WHEN name = 'March' then 3 WHEN name = 'April' then 4 WHEN name = 'May' then 5 WHEN name = 'June' then 6 WHEN name = 'July' then 7 WHEN name = 'August' then 8 WHEN name = 'September' then 9 WHEN name = 'October' then 10 WHEN name = 'November' then 11 WHEN name = 'December' then 12 END month_num FROM months
dans Oracle Nous utilisons Decode. Mais je pense que dans SQL Server, vous devez aller avec étui. Exemple:
Je peux être d'accord avec ça. Le cas est plus lisible que le décodage. En fait, le meilleur serait une jointure ou une sous-sélection avec une "table de recherche". Qui empêche le codage. Mais dans un cas particulier, il pourrait même s'agir d'une question de formatage de données, car je juge de certaines autres réponses votées.
Si vous souhaitez mapper un ensemble fixe de valeurs d'entrée par rapport à un ensemble fixe de valeurs de sortie, cas lorsque code> est votre ami:
SELECT
CASE name
WHEN 'january' THEN 1
WHEN 'february' THEN 2
WHEN 'march' THEN 3
/* ... */
END as num
FROM
months
PS: C'est la systatique standard SQL qui fonctionnera sur différents moteurs de DB.
Si vous utilisez vraiment SQL Server, vous pouvez essayer le suivant
SELECT TOP 1 MONTH(CAST('01 ' + name + ' 2000' AS DATETIME)) FROM months
De plus, pour simplement douze valeurs prévisibles, construire une chaîne, la jeter à DateTime le code> puis le transmettant par
mois () code> sera certainement plus lent que
/ Code>, et cela va exploser quand il y a un mois avec une faute de frappe.
Je pense que le meilleur que vous puissiez faire est une déclaration de cas.
select case name when 'January' then 1 when 'February' then 2 ... when 'December' then 12 end as MonthNumber from months
juste pour la variété
J'aurais peut-être besoin d'ajouter plus bas devant le nom et la question originale de Searchstring - Nick était basée sur la valeur 'Mars'.
@Mark - J'ai lobé un rassembler code> là pour faire face à cela.
Essayez d'utiliser la date de conversion de la date de SQLSERVER, comme:
select TOP 1 datepart(month,convert(datetime, left(name,3) + ' 01, 01', 107)) FROM months
Quelles sont les colonnes de la table code> code>?
La limite n'a aucune signification dans MS SQL Server. Je pense que tu t'es trompé.
limite code> n'est pas valide T-SQL et n'est pas compris par SQL-Server. C'est une construction mysql.