标签: teradata

Teradata SQL VARCHAR 和空格

当我将数字数据简单地插入 varchar 字段时,我不太明白为什么它用 2 个空格左填充它。varchar 不应该修剪空格(尾随确定......但是你用空格“frontpad”的规则在哪里)。为什么然后用 2 个前导空格填充

INSERT INTO v VALUES  ( ,1243444,3455435,8768810,'fdff',5,7,8,,)
Run Code Online (Sandbox Code Playgroud)

这里( ,1243444,3455435,8768810,'fdff',5,7,8,,)(someirrelvant_datatype,varchar(x),varchar(y),varchar(z),char(5),smallint,int,int,Timestamp)

所以数据看起来像这样

SEL     CHAR2HEXINT  ( colA ) ,colA FROM v


313732353732    172572  /* this is some other pre-existing value*/ 
2020202033343535343335      3455435  /* this is value just inserted */
Run Code Online (Sandbox Code Playgroud)

所以如果你看到上面的20202020十六进制2 spaces aka ' '

第二个问题(不是上述情况的延续)
我还有像这样的 varchar (50) col 的数据

HMSA
232434343
HMSA
4343434343
434343434
Run Code Online (Sandbox Code Playgroud)

这里 theHMSA有一个尾随空格,2020 HEX但其他值没有trailing spaces。不知道发生了什么。现在这里不varchar应该扔掉所有尾随空格吗?数据如何以HMSA<space> 不确定的方式登陆 。有任何想法吗 …

sql database varchar teradata sqldatatypes

2
推荐指数
1
解决办法
2043
查看次数

确定 Teradata 中表的主索引

teradata 中是否有命令返回表中的哪一列已定义为主索引?我没有制作一些我正在使用的表格并试图优化我对这些表格的连接。谢谢!

indexing teradata

2
推荐指数
1
解决办法
5463
查看次数

Teradata 视图在字段名称中有空格,我无法更改...如何使用 where 子句编写 select 语句

查看定义

DBName.ViewName AS LOCKING ROW FOR ACCESS 
SEL
MATL_ID                        ,
CD "Company Code"
FROM DBName.TableName;
Run Code Online (Sandbox Code Playgroud)

请注意,我无法更改视图 - 我只能查询...

以下作品...

select matl_id, "Company Code"
from DBName.ViewName; 
Run Code Online (Sandbox Code Playgroud)

但这不

select matl_id, "Company Code"
from DBName.ViewName
where "Company Code" in ("Abc", "Xyz"); 
Run Code Online (Sandbox Code Playgroud)

对最后声明的任何帮助表示赞赏

sql teradata

2
推荐指数
1
解决办法
5451
查看次数

使用 python pyodbc 捕获存储过程输出

我有一个使用 Python 脚本和 Pyodbc 模块调用的存储过程。代码如下所示:

import pyodbc
pyodbc.pooling=False
oConnexion = pyodbc.connect("driver={Teradata};dbcname=myServer;DefaultDatabase=myDB;uid=myUser;pwd=myPassword;charset=utf8;", autocommit=True)
oConnexion.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
oConnexion.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
oConnexion.setencoding(encoding='utf-8')
oCursor = oConnexion.cursor()
oQueryRegisterBatch = "CALL DEV_AUDIT.SP_AUDIT_BATCH('ED_DATA_QUALITY_MANUAL', 'REGISTER', '1900-01-01 00:00:00.000000', '2999-12-31 00:00:00.000000');"
oCursor.execute(oQueryRegisterBatch)
for row in oCursor:
    print (row)
Run Code Online (Sandbox Code Playgroud)

存储过程创建一个新记录并返回记录 ID (BATCH_KEY)。当我在 Teradata 中执行存储过程时,它会正确返回 BATCH_KEY,但我无法在 Python 中捕获它。我收到以下错误消息而不是值:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.ProgrammingError: No results.  Previous SQL was not a query.
Run Code Online (Sandbox Code Playgroud)

我可以在调用存储过程后通过查询表来检索 BATCH_KEY,但我想避免。您能否建议如何捕获存储过程的输出?

谢谢

python stored-procedures pyodbc teradata output

2
推荐指数
1
解决办法
6038
查看次数

SQL - 返回 ID 的所有行,其中一行满足条件 A、B 或 C

我正在尝试返回特定 ID 的所有行,其中在与这些 ID 相关的任何一行中满足条件。请原谅我是 SQL 的新手......下面的示例:


  • ID * 行 * # *


  • 12*1*A*

  • 12*2*B*
  • 12*3*X*
  • 12*4*Y*
  • 15*1*A*
  • 15*2*B*
  • 15*3*C*

不确定除了我的选择和条件 = (X、Y 或 Z) 之外的代码是什么:


  • ID * 行 * # *


  • 12 * 1 * A * <-- 不包括 X、Y 或 Z 但它是 ID 的一部分

  • 12 * 2 * B * <-- 在该 ID 的另一行中有 X
  • 12*3*X*
  • 12*4*Y*

尽管不满足条件,但我想提取所有行记录,只要它们是具有满足条件的行的 ID 的一部分。

谢谢您的帮助!

* 编辑:包括尝试的代码*

SELECT ID
,LINE 
,#
    WHERE   ID,
IN (
SELECT ID
WHERE # IN ('X','Y','Z'))
Run Code Online (Sandbox Code Playgroud)

结果: …

sql sql-server teradata

2
推荐指数
1
解决办法
5678
查看次数

在 Teradata SQL 中添加总计百分比列

我试图找出一种方法来添加一个基于列信息占总数百分比的列。我认为这是可能的,但我只是无法掌握做到这一点的方法。

这是我的 SQL 代码的简化版本(运行良好)和表结果:

select week
, restaurant
, case
    when cast(timestamp as time format 'HH:MI:SS') between '03:00:01' and '10:00:00' then 'Breakfast'
    when cast(timestamp as time format 'HH:MI:SS') between '10:00:01' and '14:59:00' then 'Lunch'
    else 'Dinner'
    end
    as meal
, sum(revenue) as total_rev
, sum(case when product_type = 'food' then revenue else 0 end) as food_rev
, sum(case when product_type = 'bev' then revenue else 0 end) bev_rev

from table1
group by 1,2,3
order by 1,2,3
Run Code Online (Sandbox Code Playgroud)

表输出

week  restaurant  meal …
Run Code Online (Sandbox Code Playgroud)

sql teradata percentage

2
推荐指数
1
解决办法
9570
查看次数

Row_Number 与 Teradata GROUPBY

我正在尝试ROW_NUMBER()使用下面的结果集确定如何将函数与 TERADATA 一起使用。这是我尝试过的:

select col1, col2, ROW_NUMBER() OVER (ORDER by col2  ) 
    FROM
     (select col1, col2 
    from TABLE
    ORDER BY col2) A
Run Code Online (Sandbox Code Playgroud)

结果集

38  11/14/2016  1
38  11/15/2016  2
38  11/16/2016  3
38  11/17/2016  4
38  11/18/2016  5
38  11/19/2016  6
39  11/20/2016  7
39  11/21/2016  8
39  11/22/2016  9
39  11/23/2016  10
39  11/24/2016  11
39  11/25/2016  12
Run Code Online (Sandbox Code Playgroud)

预期的:

Col1    Col2    Col3
38  11/14/2016  1
38  11/15/2016  1
38  11/16/2016  1
38  11/17/2016  1
38  11/18/2016  1 …
Run Code Online (Sandbox Code Playgroud)

sql row-number teradata

2
推荐指数
1
解决办法
5101
查看次数

什么是 Teradata 相当于 Oracle 的 DUAL

在 Oracle 中,我们可以编写它来使用SELECT语句生成单行。

SELECT 1 AS x FROM dual
Run Code Online (Sandbox Code Playgroud)

Teradata 的等价物是什么?

sql teradata dual-table

2
推荐指数
1
解决办法
1万
查看次数

雪花中的 NullIfZero

我必须将 Teradata 查询迁移到 Snowflake。

我要除以一个值,如果该值为零以避免被零除错误,我需要将其转换为 Null,是否有函数/语法?

Balance/NULLIFZERO(Limit) AS UTILIZATION,
Run Code Online (Sandbox Code Playgroud)

sql teradata snowflake-cloud-data-platform

2
推荐指数
1
解决办法
1918
查看次数

Insert Into HANA Table Specifying Columns

I'm coming from a Teradata environment where

create table mytable  
(  
first_column varchar(50),  
second_column varchar(50),  
third_column varchar(50)  
)  

insert into mytable values (first_column = 'one', second_column = 'first')  
insert into mytable values (first_column = 'two', third_column = 'second')
Run Code Online (Sandbox Code Playgroud)

is possible. This does not seem to be possible in HANA even with default specified

create column table mytable 
(  
"FIRST_COLUMN" varchar(50) default null,  
"SECOND_COLUMN" varchar(50) default null,  
"THIRD_COLUMN" varchar(50) default null  
)
Run Code Online (Sandbox Code Playgroud)

我可以创建一个具有唯一 ID 的行,为所有字段指定 NULL,然后使用 ID 更新我想要的列,这似乎既耗时又尴尬,或者有更好的方法吗?

sql teradata hana

2
推荐指数
1
解决办法
51
查看次数