当我将数字数据简单地插入 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>
不确定的方式登陆 。有任何想法吗 …
teradata 中是否有命令返回表中的哪一列已定义为主索引?我没有制作一些我正在使用的表格并试图优化我对这些表格的连接。谢谢!
查看定义
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)
对最后声明的任何帮助表示赞赏
我有一个使用 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,但我想避免。您能否建议如何捕获存储过程的输出?
谢谢
我正在尝试返回特定 ID 的所有行,其中在与这些 ID 相关的任何一行中满足条件。请原谅我是 SQL 的新手......下面的示例:
ID * 行 * # *
12*1*A*
不确定除了我的选择和条件 = (X、Y 或 Z) 之外的代码是什么:
ID * 行 * # *
12 * 1 * A * <-- 不包括 X、Y 或 Z 但它是 ID 的一部分
尽管不满足条件,但我想提取所有行记录,只要它们是具有满足条件的行的 ID 的一部分。
谢谢您的帮助!
* 编辑:包括尝试的代码*
SELECT ID
,LINE
,#
WHERE ID,
IN (
SELECT ID
WHERE # IN ('X','Y','Z'))
Run Code Online (Sandbox Code Playgroud)
结果: …
我试图找出一种方法来添加一个基于列信息占总数百分比的列。我认为这是可能的,但我只是无法掌握做到这一点的方法。
这是我的 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) 我正在尝试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) 在 Oracle 中,我们可以编写它来使用SELECT语句生成单行。
SELECT 1 AS x FROM dual
Run Code Online (Sandbox Code Playgroud)
Teradata 的等价物是什么?
我必须将 Teradata 查询迁移到 Snowflake。
我要除以一个值,如果该值为零以避免被零除错误,我需要将其转换为 Null,是否有函数/语法?
Balance/NULLIFZERO(Limit) AS UTILIZATION,
Run Code Online (Sandbox Code Playgroud) 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 更新我想要的列,这似乎既耗时又尴尬,或者有更好的方法吗?
teradata ×10
sql ×8
database ×1
dual-table ×1
hana ×1
indexing ×1
output ×1
percentage ×1
pyodbc ×1
python ×1
row-number ×1
snowflake-cloud-data-platform ×1
sql-server ×1
sqldatatypes ×1
varchar ×1