6
votes

Convertir le résultat dans la déclaration

Disons que j'ai la requête simple suivante xxx

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.

[update] corrigea la requête. En écrivant cet exemple simple, je l'ai mélangé avec MySQL [/ Mise à jour]


3 commentaires

Quelles sont les colonnes de la table ?


La limite n'a aucune signification dans MS SQL Server. Je pense que tu t'es trompé.


limite n'est pas valide T-SQL et n'est pas compris par SQL-Server. C'est une construction mysql.


7 Réponses :


3
votes

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


0 commentaires

1
votes

dans Oracle Nous utilisons Decode. Mais je pense que dans SQL Server, vous devez aller avec étui. Exemple: xxx


1 commentaires

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.



3
votes

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


1 commentaires

PS: C'est la systatique standard SQL qui fonctionnera sur différents moteurs de DB.



2
votes

Si vous utilisez vraiment SQL Server, vous pouvez essayer le suivant

SELECT TOP 1 MONTH(CAST('01 ' + name + ' 2000' AS DATETIME))
FROM months


1 commentaires

De plus, pour simplement douze valeurs prévisibles, construire une chaîne, la jeter à DateTime puis le transmettant par mois () sera certainement plus lent que / Code>, et cela va exploser quand il y a un mois avec une faute de frappe.



0
votes

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


0 commentaires

1
votes

juste pour la variété xxx


2 commentaires

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 là pour faire face à cela.



1
votes

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


0 commentaires