1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

data [SQL SERVER]

Discussão em 'Web Development' iniciada por toblesu, 7 de Março de 2008. (Respostas: 9; Visualizações: 4177)

  1. toblesu

    toblesu Power Member

    Mais um problema....
    tenho o seguinte código:

    <select name="pesquisa" id="pesquisa" >
    <option value='zero'>--------------</option>
    <?php $ano_a=$ano-1;
    $datas=mssql_query("select distinct data, convert(varchar(30),data,111) from encm where ped_id = '$resp[ped_id]' order by data desc");
    while ($linha_a = mssql_fetch_row($datas))
    {
    echo "<option value=$linha_a[0]";
    if ($_GET[d] == $linha_a[0]) echo " selected ";
    echo "> $linha_a[1]";
    echo " </option>";
    }?>
    </select>
    </label>&nbsp;&nbsp;
    <input type="image" name="Ver" src="images/17.png" id="Ver" alt="Escolher Mês" value="Ver" /><p><center>Seleccione um mes,<strong> ou</strong> uma data , para efectuar a sua pesquisa!
    </center></p> <br />
    </form>
    <?
    if(($data_row=$_POST['pesquisa']))
    {
    if($data_row=$_POST['pesquisa'])
    {
    echo $data_row=$_POST['pesquisa'];
    $bd=mssql_query("select * from encm where ped_id = '$resp[ped_id]' and data='$data_row' order by data desc");
    $num_result=mssql_num_rows($bd);
    }

    que me vai originar os seguintes erros:

    Mar // imprime o MÊS seleccionado - em vez da data em si, do tipo: 2008-03-06 22:46:13.607
    Warning: mssql_query() [function.mssql-query]: message: Conversion failed when converting datetime from character string. (severity 16) in C:\xampp\htdocs\mabiliz\Cliente\pesquisas.php on line 194

    Warning: mssql_query() [function.mssql-query]: Query failed in C:\xampp\htdocs\mabiliz\Cliente\pesquisas.php on line 194

    Warning: mssql_num_rows(): supplied argument is not a valid MS SQL-result resource in C:\xampp\htdocs\mabiliz\Cliente\pesquisas.php on line 201

    Portanto, a tabela possui um campo "data" do tipo DATETIME... acontece que preciso de ir buscar esse valor e pretendia que o seu formato fosse do género 'YYYY-MM-DD', arranjei uma solução para isso, através do SELECT CONVERT
    .....
    Na minha caixa de selecção, utilizo uma query que me vai devolver dois resultados o valor do campo DATA e o valor da DATA CONVERTIDA (visível)... quando predetendo usar o valor do campo da tabela para efectuar outras pesquisas ele dá erro de conversão de datetime para sting e além disso o valor que é passado para a variável $data_row é "Jan 14 2008 12:00AM" imprimindo apenas o "Jan".... ou invés de receber "2008-03-06 22:46:13.607".

    agradecia algumas sugestões para resolver o meu problema.... como faço para que a variável $data_row possa ficar com "
    2008-03-06 22:46:13.607".

    Obrigado.
     
  2. toblesu

    toblesu Power Member

    Se estivesse a trabalhar MYSQL, uma solução seria por exemplo usar o mysql_real_escape_string($_POST['pesquisa']);

    existe algum "comando" em sql server semelhante a este? que me possa retornar a string toda que existe guardada num campo da BD?

    o formato extraído, já nao tem que ser 'Y-m-d H:i:s' como tinha inicialmente pedido.

    Outra coisa, tenho uma função que pretendo que faça o return de uma variável, no entanto ela não retorna... a sintaxe é:

    function convertData($var)
    {
    $data_BD=$var;
    if($data_BD!='')
    {
    $datahora=explode(' ',$data_BD);
    $mes=$datahora[0];
    $dia=$datahora[1];
    $ano=$datahora[2];
    switch($mes)
    {
    case "Jan": $mes_sqlserver = "01"; break;
    case "Feb": $mes_sqlserver = "02"; break;
    case "Mar": $mes_sqlserver = "03"; break;
    case "Apr": $mes_sqlserver = "04"; break;
    case "May": $mes_sqlserver = "05"; break;
    case "Jun": $mes_sqlserver = "06"; break;
    case "Jul": $mes_sqlserver = "07"; break;
    case "Aug": $mes_sqlserver = "08"; break;
    case "Sep": $mes_sqlserver = "09"; break;
    case "Oct": $mes_sqlserver = "10"; break;
    case "Nov": $mes_sqlserver = "11"; break;
    case "Dec":$mes_sqlserver = "12"; break;
    }
    echo $data_f = ($ano."-".$mes_sqlserver."-".$dia);
    return $data_f;
    }
    }

    no código faço o chamamento da função da seguinte forma:

    $var=$linha_a[0];
    convertData($var);

    mas quando faço o echo $var; ele imprime o valor que está no $linha_a[0];
    possivelmente estou a usar mal a função.....
    alguma sugestão?

    obrigado.
     
  3. toblesu

    toblesu Power Member

    Problema resolvido.....


    Alterei o formato do campo "data" para VARCHAR e funcionou.. deixei a função "CONVERT" de lado e trabalhei como se de uma string se tratasse, desde o momento da sua inserção na BD até ao momento das pesquisas.... nao deu problemas, pode nao ser a solução mais correcta, mas neste caso a mais eficaz!


    obrigado na mesma!

    Cumps
     
  4. alfinete

    alfinete Power Member

    mesmo ja tendos resolvido o problema qui vai
    uma lista de converts datetime em sqlserver

    Código:
    select convert(char, getdate(), 100) --mon dd yyyy hh:mmAM (or PM)
    select convert(char, getdate(), 101) --mm/dd/yyyy
    select convert(char, getdate(), 102) --yyyy.mm.dd
    select convert(char, getdate(), 103) --dd/mm/yyyy
    select convert(char, getdate(), 104) --dd.mm.yyyy
    select convert(char, getdate(), 105) --dd-mm-yyyy
    select convert(char, getdate(), 106) --dd mon yyyy
    select convert(char, getdate(), 107) --mon dd, yyyy
    select convert(char, getdate(), 108) --hh:mm:ss
    select convert(char, getdate(), 109) --mon dd yyyy hh:mm:ss:mmmAM (or PM)
    select convert(char, getdate(), 110) --mm-dd-yyyy
    select convert(char, getdate(), 111) --yyyy/mm/dd
    select convert(char, getdate(), 112) --yyyymmdd
    select convert(char, getdate(), 113) --dd mon yyyy hh:mm:ss:mmm
    select convert(char, getdate(), 114) --hh:mm:ss:mmm(24h)
    select convert(char, getdate(), 120) --yyyy-mm-dd hh:mm:ss(24h)
    select convert(char, getdate(), 121) --yyyy-mm-dd hh:mm:ss.mmm 
     
  5. toblesu

    toblesu Power Member

    sim.. tenho conhecimento dessa lista..... mas o meu maior problema nao tinha a ver com esse tipo de conversão... antes com o POST... que so me ia buscar o "<mes>", por exemplo na data "Marc 10 2008 00:00:00", com o POST so conseguia ia buscar "Mar".. o resto da string ficava perdida.... depois nao conseguia fazer nada dela........

    daí ter optado pela maneira mais fácil e provavelmente menos correcta, transformar o campo "datetime" em "varchar"....

    de qualquer das formas, muito obrigado pela dica!

    :)
     
  6. alfinete

    alfinete Power Member

  7. XpiritO

    XpiritO Power Member

    Boas.

    Alguém me sabe dizer como converter, em T-SQL, uma variável DATETIME para este formato: dd-mm-yyyy hh:mm:ss ?

    Deixo aqui um código de exemplo:
    Código:
    PRINT CONVERT(nvarchar(30), GetDate(), 100)
    ... que me devolve:
    Eu queria era algo do género:
    Bibliografia já pesquisada:
    http://doc.ddart.net/mssql/sql70/ca-co_1.htm
    http://sqlserverpedia.com/wiki/Data_Types_-_Date_and_Time
    http://databases.aspfaq.com/databas...styles-for-converting-datetime-to-string.html
     
    Última edição: 25 de Abril de 2009
  8. SoundSurfer

    SoundSurfer Power Member

    Se o que o alfinete postou está correcto:

    Código:
    print convert(char, getdate(), 110) + ' ' + convert(char, getdate(), 108)
     
  9. FabricioSilva

    FabricioSilva Power Member

    Olha logo a noite quando chegar a casa, eu dou uma vista de olhos no meu livro de sql, se tiver algo eu digo-te ;)
     
  10. airbatucada

    airbatucada Power Member

    PRINT CONVERT(nvarchar(10), GetDate(), 105) + ' ' +CONVERT(nvarchar(12), GetDate(), 114)
     

Partilhar esta Página