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.