Query Sql para retornar o maior número de uma coluna

oraculum

Tagged: ,


Bem esses dias precisei de pegar o maior número de uma coluna onde tinha ali números e letras acontece que se fizermos max(codigo) ele não funciona pois as vezes a coluna é string e não inteiro. Para resolver o problema é preciso incluir uma função personalizada no seu banco, segue-se abaixo comando para criar a função:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public static void setFuncaoSQLUltimoCodigo()
        {
            String connetionString = Dados.StringDeConexao;
            SqlConnection conexaoSql = new SqlConnection(connetionString);
 
            SqlCommand comando = conexaoSql.CreateCommand();
            //  query para inserir a liberacao
            string strSQL = "CREATE FUNCTION [dbo].[getSomenteInt] (@string VARCHAR(8000)) " +
                "RETURNS VARCHAR(8000) AS BEGIN DECLARE @IncorrectCharLoc SMALLINT " +
                "SET @IncorrectCharLoc = PATINDEX('%[^0-9]%', @string) " +
                "WHILE @IncorrectCharLoc > 0 BEGIN SET @string = " +
                "STUFF(@string, @IncorrectCharLoc, 1, '0') SET @IncorrectCharLoc = " +
                "PATINDEX('%[^0-9]%', @string) END SET @string = @string " +
                "RETURN @string END";
            try
            {
                // abre o banco
                conexaoSql.Open();
 
                // atribui a query de alteracao da licenca
                comando.CommandText = strSQL;
 
                // executa a query
                comando.ExecuteNonQuery();
            }
            //Trata a exceção
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                //fecha a conexao 
                conexaoSql.Close();
            }
        }

Depois é só usar a função na query por exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public String getUltimoCodigo()
        {
            String ultimocod = "";
 
            using (SqlConnection con = new SqlConnection(DAL.Dados.StringDeConexao))
            {
                try
                {
                    const string SQL = "SELECT Max(dbo.getSomenteInt(Codigo_Ordenacao)) as col FROM Produtos";
 
                    SqlCommand cmd = new SqlCommand(SQL, con);
 
                    con.Open();
                    ultimocod = cmd.ExecuteScalar().ToString();
                }
                catch
                {
                    con.Close();
                }
                finally
                {
                    con.Close();
                }
            }
 
            return ultimocod;
        }
Share Button

Leave a Reply